diff options
Diffstat (limited to 'src/unix.c')
| -rw-r--r-- | src/unix.c | 26 |
1 files changed, 16 insertions, 10 deletions
@@ -424,10 +424,11 @@ Return value: **/ { - __asm__("rdtsc;" - : - : - : "%eax", "%edx"); + ULONG uLow, uHigh; + + __asm__ volatile("rdtsc" + : "=a" (uLow), "=d" (uHigh)); + return(((UINT64)uHigh << 32) | (UINT64)uLow); } @@ -1068,25 +1069,30 @@ SystemCreateSemaphore(ULONG uValue) return(u); } -FLAG +FLAG SystemDeleteSemaphore(ULONG u) { union semun { int val; struct semid_ds *buf; unsigned short *array; } value; + FLAG fRet = TRUE; + memset(&value, 0, sizeof(value)); LOCK_SYSTEM; - if ((u < MAX_SEM) && (g_rgSemaphores[u] >= 0)) + if ((u < MAX_SEM) && (g_rgSemaphores[u] >= 0)) { - if (semctl(g_rgSemaphores[u], 0, IPC_RMID, value) < 0) + if (semctl(g_rgSemaphores[u], 0, IPC_RMID, value) < 0) { - return(FALSE); + fRet = FALSE; + } + else + { + g_rgSemaphores[u] = -1; } - g_rgSemaphores[u] = -1; } UNLOCK_SYSTEM; - return(TRUE); + return(fRet); } void |
