mirror of
https://github.com/postgres/postgres.git
synced 2025-08-24 09:27:52 +03:00
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.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user