mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08: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:
parent
763c4866a2
commit
206378e4ab
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user