From e994d5036eca87db19547db3cdbdc1eb5d571063 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 9 Aug 2001 21:21:13 +0000 Subject: [PATCH] Added Interlocked*Pointer functions. Fixed InterlockedCompareExchange prototype. --- dlls/ddraw/dsurface/main.c | 8 ++++---- dlls/ntdll/critsection.c | 4 ++-- dlls/winsock/socket.c | 2 +- dlls/x11drv/x11drv_main.c | 8 ++++---- include/winbase.h | 31 +++++++++++++++++++++++++++---- scheduler/critsection.c | 2 +- scheduler/pthread.c | 4 ++-- 7 files changed, 41 insertions(+), 18 deletions(-) diff --git a/dlls/ddraw/dsurface/main.c b/dlls/ddraw/dsurface/main.c index 5053a72a260..39600c7d888 100644 --- a/dlls/ddraw/dsurface/main.c +++ b/dlls/ddraw/dsurface/main.c @@ -315,10 +315,10 @@ Main_DirectDrawSurface_ChangeUniquenessValue(LPDIRECTDRAWSURFACE7 iface) if (old_uniqueness_value == 0) break; if (new_uniqueness_value == 0) new_uniqueness_value = 1; - if (InterlockedCompareExchange((PVOID*)&vThis->uniqueness_value, - (PVOID)old_uniqueness_value, - (PVOID)new_uniqueness_value) - == (PVOID)old_uniqueness_value) + if (InterlockedCompareExchange((LONG*)&vThis->uniqueness_value, + old_uniqueness_value, + new_uniqueness_value) + == old_uniqueness_value) break; } diff --git a/dlls/ntdll/critsection.c b/dlls/ntdll/critsection.c index e9f49aa5a4d..4373fa978fa 100644 --- a/dlls/ntdll/critsection.c +++ b/dlls/ntdll/critsection.c @@ -127,8 +127,8 @@ static inline HANDLE get_semaphore( RTL_CRITICAL_SECTION *crit ) { HANDLE sem; if (NtCreateSemaphore( &sem, SEMAPHORE_ALL_ACCESS, NULL, 0, 1 )) return 0; - if (!(ret = (HANDLE)InterlockedCompareExchange( (PVOID *)&crit->LockSemaphore, - (PVOID)sem, 0 ))) + if (!(ret = (HANDLE)interlocked_cmpxchg( (PVOID *)&crit->LockSemaphore, + (PVOID)sem, 0 ))) ret = sem; else NtClose(sem); /* somebody beat us to it */ diff --git a/dlls/winsock/socket.c b/dlls/winsock/socket.c index 2248f626de2..70d04bcc95a 100644 --- a/dlls/winsock/socket.c +++ b/dlls/winsock/socket.c @@ -736,7 +736,7 @@ static void WSOCK32_async_accept(SOCKET s, SOCKET as) int q; /* queue socket for WSAAsyncSelect */ for (q=0; qcritsect),critsect,NULL) != NULL) { + if (InterlockedCompareExchangePointer((void**)&(((wine_mutex)mutex)->critsect),critsect,NULL) != NULL) { /* too late, some other thread already did it */ DeleteCriticalSection(critsect); HeapFree(GetProcessHeap(), 0, critsect);