aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMagnus Hagander <magnus@hagander.net>2008-05-21 14:20:48 +0000
committerMagnus Hagander <magnus@hagander.net>2008-05-21 14:20:48 +0000
commit206378e4ab02d8ea989c9b26103756b9a8be618a (patch)
tree0e343c35b6b568d4d690e98016684f7c1cfe8c69 /src
parent763c4866a2771a4e5c693cbd43fa349980828fab (diff)
downloadpostgresql-206378e4ab02d8ea989c9b26103756b9a8be618a.tar.gz
postgresql-206378e4ab02d8ea989c9b26103756b9a8be618a.zip
Use CRITICAL_SECTION instead of Mutexes for thread-locking in libpq on
Windows, for better performance. Per suggestion from Andrew Chernow, but not his patch since the underlying code was changed to deal with return values.
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/libpq/pthread-win32.c13
-rw-r--r--src/port/pthread-win32.h4
2 files changed, 10 insertions, 7 deletions
diff --git a/src/interfaces/libpq/pthread-win32.c b/src/interfaces/libpq/pthread-win32.c
index 1fdd264171c..0f9b3a64889 100644
--- a/src/interfaces/libpq/pthread-win32.c
+++ b/src/interfaces/libpq/pthread-win32.c
@@ -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;
}
diff --git a/src/port/pthread-win32.h b/src/port/pthread-win32.h
index 1552ae37385..e8e4a559ce4 100644
--- a/src/port/pthread-win32.h
+++ b/src/port/pthread-win32.h
@@ -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);