ScopedTryLock(IOLock* lock) : lock_(lock) { if (lock_) { if (! IOLockTryLock(lock_)) { // lock failed. lock_ = NULL; } } }
void BrcmPatchRAM::uploadFirmwareThread(void *arg, wait_result_t wait) { DebugLog("sendFirmwareThread enter\n"); // don't start firmware load when lock is held (instance is shutting down) if (IOLockTryLock(mLoadFirmwareLock)) { BrcmPatchRAM* me = static_cast<BrcmPatchRAM*>(arg); me->resetDevice(); IOSleep(20); me->uploadFirmware(); #ifndef TARGET_ELCAPITAN me->publishPersonality(); #endif me->scheduleWork(kWorkFinished); IOLockUnlock(mLoadFirmwareLock); } DebugLog("sendFirmwareThread termination\n"); thread_terminate(current_thread()); DebugLog("!!! sendFirmwareThread post-terminate !!! should not be here\n"); }