]> granicus.if.org Git - postgresql/commitdiff
Use CRITICAL_SECTION instead of Mutexes for thread-locking in libpq on
authorMagnus Hagander <magnus@hagander.net>
Wed, 21 May 2008 14:20:48 +0000 (14:20 +0000)
committerMagnus Hagander <magnus@hagander.net>
Wed, 21 May 2008 14:20:48 +0000 (14:20 +0000)
Windows, for better performance.

Per suggestion from Andrew Chernow, but not his patch since the underlying
code was changed to deal with return values.

src/interfaces/libpq/pthread-win32.c
src/port/pthread-win32.h

index 1fdd264171c6ecb1fee03f12dc31139da66cab3d..0f9b3a648895611f6189d6684baf530e55173227 100644 (file)
@@ -5,7 +5,7 @@
 *
 * Copyright (c) 2004-2008, PostgreSQL Global Development Group
 * IDENTIFICATION
-*      $PostgreSQL: pgsql/src/interfaces/libpq/pthread-win32.c,v 1.16 2008/05/16 18:30:53 mha Exp $
+*      $PostgreSQL: pgsql/src/interfaces/libpq/pthread-win32.c,v 1.17 2008/05/21 14:20:48 mha Exp $
 *
 *-------------------------------------------------------------------------
 */
@@ -35,24 +35,27 @@ pthread_getspecific(pthread_key_t key)
 int
 pthread_mutex_init(pthread_mutex_t *mp, void *attr)
 {
-       *mp = CreateMutex(0, 0, 0);
-       if (*mp == NULL)
+       *mp = (CRITICAL_SECTION *)malloc(sizeof(CRITICAL_SECTION));
+       if (!*mp)
                return 1;
+       InitializeCriticalSection(*mp);
        return 0;
 }
 
 int
 pthread_mutex_lock(pthread_mutex_t *mp)
 {
-       if (WaitForSingleObject(*mp, INFINITE) != WAIT_OBJECT_0)
+       if (!*mp)
                return 1;
+       EnterCriticalSection(*mp);
        return 0;
 }
 
 int
 pthread_mutex_unlock(pthread_mutex_t *mp)
 {
-       if (!ReleaseMutex(*mp))
+       if (!*mp)
                return 1;
+       LeaveCriticalSection(*mp);
        return 0;
 }
index 1552ae37385be4922f95ebcb2d3598f60404fdce..e8e4a559ce4316335968e69a44a48def341d2338 100644 (file)
@@ -1,11 +1,11 @@
 /*
- * $PostgreSQL: pgsql/src/port/pthread-win32.h,v 1.4 2008/05/17 01:28:25 adunstan Exp $ 
+ * $PostgreSQL: pgsql/src/port/pthread-win32.h,v 1.5 2008/05/21 14:20:48 mha Exp $ 
  */
 #ifndef __PTHREAD_H
 #define __PTHREAD_H
 
 typedef ULONG pthread_key_t;
-typedef HANDLE pthread_mutex_t;
+typedef CRITICAL_SECTION *pthread_mutex_t;
 typedef int pthread_once_t;
 
 DWORD          pthread_self(void);