void geventDetachSource(GListener *pl, GSourceHandle gsh) { if (pl) { gfxMutexEnter(&geventMutex); deleteAssignments(pl, gsh); if (!gsh) doExitEvent(pl); gfxMutexExit(&geventMutex); } }
void geventDetachSource(GListener *pl, GSourceHandle gsh) { if (pl) { chMtxLock(&geventMutex); deleteAssignments(pl, gsh); if (!gsh && chSemGetCounterI(&pl->waitqueue) < 0) { chBSemWait(&pl->eventlock); // Obtain the buffer lock pl->event.type = GEVENT_EXIT; // Set up the EXIT event chSemSignal(&pl->waitqueue); // Wake up the listener chBSemSignal(&pl->eventlock); // Release the buffer lock } chMtxUnlock(); } }
void geventDetachSource(GListener *pl, GSourceHandle gsh) { if (pl) { gfxMutexEnter(&geventMutex); deleteAssignments(pl, gsh); if (!gsh && gfxSemCounter(&pl->waitqueue) < 0) { gfxSemWait(&pl->eventlock, TIME_INFINITE); // Obtain the buffer lock pl->event.type = GEVENT_EXIT; // Set up the EXIT event gfxSemSignal(&pl->waitqueue); // Wake up the listener gfxSemSignal(&pl->eventlock); // Release the buffer lock } gfxMutexExit(&geventMutex); } }
void geventDetachSourceListeners(GSourceHandle gsh) { chMtxLock(&geventMutex); deleteAssignments(0, gsh); chMtxUnlock(); }
void geventDetachSourceListeners(GSourceHandle gsh) { gfxMutexEnter(&geventMutex); deleteAssignments(0, gsh); gfxMutexExit(&geventMutex); }