Esempio n. 1
0
// Block the task until the semaphore is acquired or the timeout expires
OsStatus OsCSemLinux::acquire(const OsTime& rTimeout)
{
   struct timespec timeout;
   OsStatus res;

   if (rTimeout.isInfinite())
      res = (pt_sem_wait(&mSemImp) == POSIX_OK) ? OS_SUCCESS : OS_BUSY;
   else if (rTimeout.isNoWait())
      res = (pt_sem_trywait(&mSemImp) == POSIX_OK) ? OS_SUCCESS : OS_BUSY;
   else
   {
      OsUtilLinux::cvtOsTimeToTimespec(rTimeout, &timeout);
      res = (pt_sem_timedwait(&mSemImp, &timeout) == POSIX_OK) ? OS_SUCCESS : OS_WAIT_TIMEOUT;
   }

#ifdef OS_CSEM_DEBUG
   if (res == OS_SUCCESS)
   {
      updateAcquireStats();
   }
#endif

#ifdef OS_SYNC_DEBUG
   if (res == OS_SUCCESS)
   {
      mSyncCrumbs.dropCrumb(pthread_self(), crumbAcquired);
   }
#endif

   return res;
}
Esempio n. 2
0
// Conditionally acquire the semaphore (i.e., don't block)
// Return OS_BUSY if the semaphore is held by some other task
OsStatus OsCSemWnt::tryAcquire(void)
{
   OsStatus res = OsUtilWnt::synchObjTryAcquire(mSemImp);

#ifdef OS_CSEM_DEBUG
   if (res == OS_SUCCESS)
      updateAcquireStats();
#endif

   return res;
}
Esempio n. 3
0
// Block the task until the semaphore is acquired or the timeout expires
OsStatus OsCSemWnt::acquire(const OsTime& rTimeout)
{
   OsStatus res = OsUtilWnt::synchObjAcquire(mSemImp, rTimeout);

#ifdef OS_CSEM_DEBUG
   if (res == OS_SUCCESS)
      updateAcquireStats();
#endif

   return res;
}
Esempio n. 4
0
// Conditionally acquire the semaphore (i.e., don't block)
// Return OS_BUSY if the semaphore is held by some other task
OsStatus OsCSemLinux::tryAcquire(void)
{
   OsStatus res;
   
   res = (pt_sem_trywait(&mSemImp) == POSIX_OK) ? OS_SUCCESS : OS_BUSY;

#ifdef OS_CSEM_DEBUG
   if (res == OS_SUCCESS)
      updateAcquireStats();
#endif

   return res;
}
Esempio n. 5
0
// Conditionally acquire the semaphore (i.e., don't block)
// Return OS_BUSY if the semaphore is held by some other task
OsStatus OsCSemLinux::tryAcquire(void)
{
   OsStatus res;

   res = (pt_sem_trywait(&mSemImp) == POSIX_OK) ? OS_SUCCESS : OS_BUSY;

#ifdef OS_CSEM_DEBUG
   if (res == OS_SUCCESS)
   {
      updateAcquireStats();
   }
#endif

#ifdef OS_SYNC_DEBUG
   if (res == OS_SUCCESS)
   {
      mSyncCrumbs.dropCrumb(pthread_self(), crumbAcquired);
   }
#endif

   return res;
}