Author: mturk Date: Wed Sep 2 15:38:47 2009 New Revision: 810574 URL: http://svn.apache.org/viewvc?rev=810574&view=rev Log: Make sure we use signal event as firts object in wait
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/pmutex.c commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/pmutex.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/pmutex.c?rev=810574&r1=810573&r2=810574&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/win32/pmutex.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/os/win32/pmutex.c Wed Sep 2 15:38:47 2009 @@ -45,7 +45,7 @@ return ACR_SUCCESS; } else - return ACR_EBADF; + return ACR_EBADF; } return ACR_EFTYPE; } @@ -119,8 +119,8 @@ DWORD ws; HANDLE wh[2]; - wh[0] = (HANDLE)ACR_IOH(mutex); - wh[1] = dll_psig_handle; + wh[0] = dll_psig_handle; + wh[1] = (HANDLE)ACR_IOH(mutex); if (ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) { return ACR_EFTYPE; } @@ -131,24 +131,29 @@ rc = 0; ws = WaitForMultipleObjectsEx(2, wh, FALSE, INFINITE, TRUE); - if (ws == WAIT_OBJECT_0 || ws == WAIT_ABANDONED) { - /* We got the lock */ - return 0; - } - else if (ws == WAIT_OBJECT_0 + 1) { + else if (ws == WAIT_OBJECT_0) { /* Signal event is set * TODO: Deliver a signal */ rc = ACR_EINTR; } + if (ws == WAIT_OBJECT_0 + 1 || ws == WAIT_ABANDONED_0 + 1) { + /* We got the lock */ + return 0; + } else if (ws == WAIT_IO_COMPLETION) { /* APC queued to this thread * TODO: Deliver a signal */ rc = ACR_TIMEUP; } - else + else if (ws == WAIT_ERROR) { + /* We got the error while waiting + */ rc = ACR_GET_OS_ERROR(); + } + else + rc = ACR_ENOLOCK; } while (rc == ACR_EINTR); return rc; Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c?rev=810574&r1=810573&r2=810574&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c Wed Sep 2 15:38:47 2009 @@ -153,30 +153,35 @@ return ACR_EINVAL; } - wh[0] = s; - wh[1] = dll_psig_handle; + wh[0] = dll_psig_handle; + wh[1] = s; do { rc = 0; ws = WaitForMultipleObjectsEx(2, wh, FALSE, INFINITE, TRUE); - if (ws == WAIT_OBJECT_0 || ws == WAIT_ABANDONED) { - /* We got the lock */ - return 0; - } - else if (ws == WAIT_OBJECT_0 + 1) { + if (ws == WAIT_OBJECT_0) { /* Signal event is set * TODO: Deliver a signal */ rc = ACR_EINTR; } + else if (ws == WAIT_OBJECT_0 + 1) { + /* We got the lock */ + return 0; + } else if (ws == WAIT_IO_COMPLETION) { /* APC queued to this thread * TODO: Deliver a signal */ rc = ACR_TIMEUP; } - else + else if (ws == WAIT_ERROR) { + /* We got the error while waiting + */ rc = ACR_GET_OS_ERROR(); + } + else + rc = ACR_ENOLOCK; } while (rc == ACR_EINTR); return rc;