src/thread/win32/SDL_syssem.c
changeset 3069 caefe2344f65
parent 2859 99210400e8b9
child 3071 6f3308d4b6cd
equal deleted inserted replaced
3068:b21348d47cab 3069:caefe2344f65
   107     switch (WaitForSemaphoreCE(sem->id, dwMilliseconds)) {
   107     switch (WaitForSemaphoreCE(sem->id, dwMilliseconds)) {
   108 #else
   108 #else
   109     switch (WaitForSingleObject(sem->id, dwMilliseconds)) {
   109     switch (WaitForSingleObject(sem->id, dwMilliseconds)) {
   110 #endif
   110 #endif
   111     case WAIT_OBJECT_0:
   111     case WAIT_OBJECT_0:
   112         --sem->count;
   112         InterlockedDecrement(&sem->count);
   113         retval = 0;
   113         retval = 0;
   114         break;
   114         break;
   115     case WAIT_TIMEOUT:
   115     case WAIT_TIMEOUT:
   116         retval = SDL_MUTEX_TIMEDOUT;
   116         retval = SDL_MUTEX_TIMEDOUT;
   117         break;
   117         break;
   156     /* Increase the counter in the first place, because
   156     /* Increase the counter in the first place, because
   157      * after a successful release the semaphore may
   157      * after a successful release the semaphore may
   158      * immediately get destroyed by another thread which
   158      * immediately get destroyed by another thread which
   159      * is waiting for this semaphore.
   159      * is waiting for this semaphore.
   160      */
   160      */
   161     ++sem->count;
   161     InterlockedIncrement(&sem->count);
   162 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300)
   162 #if defined(_WIN32_WCE) && (_WIN32_WCE < 300)
   163     if (ReleaseSemaphoreCE(sem->id, 1, NULL) == FALSE) {
   163     if (ReleaseSemaphoreCE(sem->id, 1, NULL) == FALSE) {
   164 #else
   164 #else
   165     if (ReleaseSemaphore(sem->id, 1, NULL) == FALSE) {
   165     if (ReleaseSemaphore(sem->id, 1, NULL) == FALSE) {
   166 #endif
   166 #endif
   167         --sem->count;           /* restore */
   167         InterlockedDecrement(&sem->count);           /* restore */
   168         SDL_SetError("ReleaseSemaphore() failed");
   168         SDL_SetError("ReleaseSemaphore() failed");
   169         return -1;
   169         return -1;
   170     }
   170     }
   171     return 0;
   171     return 0;
   172 }
   172 }