void BasicTaskScheduler0::pauseTask() { fPauseTask = 1; // printf("wait for task pause: this %p\n", this); condWait(); fPauseTask = 0; // printf("task already paused: this %p\n", this); }
epicsMutexLockStatus epicsMutexOsdLock(struct epicsMutexOSD * pmutex) { pthread_t tid = pthread_self(); int status; if (!pmutex || !tid) return epicsMutexLockError; status = mutexLock(&pmutex->lock); if (status == EINVAL) return epicsMutexLockError; checkStatusQuit(status, "pthread_mutex_lock", "epicsMutexOsdLock"); while (pmutex->owned && !pthread_equal(pmutex->ownerTid, tid)) condWait(&pmutex->waitToBeOwner, &pmutex->lock); pmutex->ownerTid = tid; pmutex->owned = 1; pmutex->count++; status = pthread_mutex_unlock(&pmutex->lock); checkStatusQuit(status, "pthread_mutex_unlock", "epicsMutexOsdLock"); return epicsMutexLockOK; }