Skip to content
Snippets Groups Projects
Commit 206378e4 authored by Magnus Hagander's avatar Magnus Hagander
Browse files

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.
parent 763c4866
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
/*
* $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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment