Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
cleanup windows portability in there
[simgrid.git] / src / xbt / xbt_os_thread.c
index 023848e..8114e84 100644 (file)
@@ -307,8 +307,7 @@ void
 xbt_os_sem_acquire(xbt_os_sem_t sem)
 {
        if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_acquire() failed: %s",
-           strerror(EINVAL));
+               THROW0(arg_error,EINVAL,"Cannot acquire of the NULL semaphore");
        
        if(sem_wait(&(sem->s)) < 0)
                THROW1(system_error,errno,"sem_wait() failed: %s",
@@ -322,7 +321,7 @@ void xbt_os_sem_timedacquire(xbt_os_sem_t sem,double timeout)
        double end = timeout + xbt_os_time();
        
        if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_timedacquire() failed: %s",strerror(EINVAL));
+               THROW0(arg_error,EINVAL,"Cannot acquire of the NULL semaphore");
        
        if (timeout < 0) 
        {
@@ -330,6 +329,10 @@ void xbt_os_sem_timedacquire(xbt_os_sem_t sem,double timeout)
        } 
        else 
        {
+       /* mac os x have not the sem_timedwait() function */
+#ifndef HAVE_SEM_TIMEDWAIT
+       THROW_UNIMPLEMENTED;
+#else
                ts_end.tv_sec = (time_t) floor(end);
                ts_end.tv_nsec = (long)  ( ( end - ts_end.tv_sec) * 1000000000);
                DEBUG2("sem_timedwait(%p,%p)",&(sem->s),&ts_end);
@@ -345,6 +348,7 @@ void xbt_os_sem_timedacquire(xbt_os_sem_t sem,double timeout)
                        default:
                        THROW3(system_error,errcode,"sem_timedwait(%p,%f) failed: %s",sem,timeout, strerror(errcode));
                }   
+#endif
        }
 }
 
@@ -352,8 +356,7 @@ void
 xbt_os_sem_release(xbt_os_sem_t sem)
 {
        if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_release() failed: %s",
-           strerror(EINVAL));
+               THROW0(arg_error,EINVAL,"Cannot release of the NULL semaphore");
        
        if(sem_post(&(sem->s)) < 0)
                THROW1(system_error,errno,"sem_post() failed: %s",
@@ -363,9 +366,8 @@ xbt_os_sem_release(xbt_os_sem_t sem)
 void
 xbt_os_sem_destroy(xbt_os_sem_t sem)
 {
-       if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_destroy() failed: %s",
-           strerror(EINVAL));
+   if(!sem)
+     return;
            
        if(sem_destroy(&(sem->s)) < 0)
                THROW1(system_error,errno,"sem_destroy() failed: %s",
@@ -376,8 +378,7 @@ void
 xbt_os_sem_get_value(xbt_os_sem_t sem, int* svalue)
 {
        if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_getvalue() failed: %s",
-           strerror(EINVAL));
+               THROW0(arg_error,EINVAL,"Cannot get the value of the NULL semaphore");
            
        if(sem_getvalue(&(sem->s),svalue) < 0)
                THROW1(system_error,errno,"sem_getvalue() failed: %s",
@@ -733,8 +734,8 @@ xbt_os_sem_init(unsigned int value)
        xbt_os_sem_t res;
        
        if(value > INT_MAX)
-       THROW1(arg_error,EINVAL,"xbt_os_sem_init() failed: %s",
-           strerror(EINVAL));
+       THROW1(arg_error,value,"Semaphore initial value too big: %ud cannot be stored as a signed int",
+           value);
        
        res = (xbt_os_sem_t)xbt_new0(s_xbt_os_sem_t,1);
        
@@ -755,8 +756,7 @@ void
 xbt_os_sem_acquire(xbt_os_sem_t sem)
 {
        if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_acquire() failed: %s",
-           strerror(EINVAL));  
+               THROW0(arg_error,EINVAL,"Cannot acquire the NULL semaphore");
 
        /* wait failure */
        if(WAIT_OBJECT_0 != WaitForSingleObject(sem->h,INFINITE))
@@ -774,8 +774,7 @@ void xbt_os_sem_timedacquire(xbt_os_sem_t sem, double timeout)
        double end = timeout + xbt_os_time();
        
        if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_timedacquire() failed: %s",
-           strerror(EINVAL));  
+               THROW0(arg_error,EINVAL,"Cannot acquire the NULL semaphore");
        
         if (timeout < 0) 
        {
@@ -811,8 +810,7 @@ void
 xbt_os_sem_release(xbt_os_sem_t sem)
 {
        if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_post() failed: %s",
-           strerror(EINVAL));
+               THROW0(arg_error,EINVAL,"Cannot release the NULL semaphore");
        
        if(!ReleaseSemaphore(sem->h,1, NULL)) 
                THROW1(system_error,GetLastError(),"ReleaseSemaphore() failed: %s",
@@ -825,9 +823,7 @@ xbt_os_sem_release(xbt_os_sem_t sem)
 void
 xbt_os_sem_destroy(xbt_os_sem_t sem)
 {
-       if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_destroy() failed: %s",
-           strerror(EINVAL));
+       if(!sem) return;
        
        if(!CloseHandle(sem->h)) 
                THROW1(system_error,GetLastError(),"CloseHandle() failed: %s",
@@ -843,8 +839,7 @@ void
 xbt_os_sem_get_value(xbt_os_sem_t sem, int* svalue)
 {
        if(!sem)
-               THROW1(arg_error,EINVAL,"xbt_os_sem_get_value() failed: %s",
-           strerror(EINVAL));
+               THROW0(arg_error,EINVAL,"Cannot get the value of the NULL semaphore");
        
        EnterCriticalSection(&(sem->value_lock));  
        *svalue = sem->value;