[PATCHES] win32 libpq ENABLE_THREAD_SAFETY

2004-06-13 Thread Andreas Pflug
So here's the updated ENABLE_THREAD_SAFETY patch for win32, to be 
compiled under VC5/6/7 (tested with VC6).

nmake -f win32.mak [DEBUG=1] [USE_SSL=1] [ENABLE_THREAD_SAFETY=1]
are supported.
Regards,
Andreas
/*-
*
* pthread-win32.c
*partial pthread implementation for win32
*
* Copyright (c) 2004, PostgreSQL Global Development Group
* IDENTIFICATION
*   $PostgreSQL: $ 
*
*-
*/


#include windows.h
#include pthread.h

HANDLE pthread_self()
{
   return GetCurrentThread();
}

void pthread_setspecific(pthread_key_t key, void *val)
{
}

void *pthread_getspecific(pthread_key_t key)
{
return NULL;
}

void pthread_mutex_init(pthread_mutex_t *mp, void *attr)
{
   *mp = CreateMutex(0, 0, 0);
}

void pthread_mutex_lock(pthread_mutex_t *mp)
{
   WaitForSingleObject(*mp, INFINITE);
}

void pthread_mutex_unlock(pthread_mutex_t *mp)
{
   ReleaseMutex(*mp);
}
#ifndef __PTHREAD_H
#define __PTHREAD_H

typedef ULONG pthread_key_t;
typedef HANDLE pthread_mutex_t;
typedef int pthread_once_t;

HANDLE pthread_self();

void pthread_setspecific(pthread_key_t, void*);
void* pthread_getspecific(pthread_key_t);

void pthread_mutex_init(pthread_mutex_t *, void *attr);
void pthread_mutex_lock(pthread_mutex_t*); // blocking
void pthread_mutex_unlock(pthread_mutex_t*);

#endif
Index: interfaces/libpq/fe-connect.c
===
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/libpq/fe-connect.c,v
retrieving revision 1.274
diff -u -r1.274 fe-connect.c
--- interfaces/libpq/fe-connect.c   10 Jun 2004 22:26:24 -  1.274
+++ interfaces/libpq/fe-connect.c   13 Jun 2004 19:13:58 -
@@ -882,11 +882,13 @@
const char *node = NULL;
int ret;
 #ifdef ENABLE_THREAD_SAFETY
+#ifndef WIN32
static pthread_once_t check_sigpipe_once = PTHREAD_ONCE_INIT;
 
/* Check only on first connection request */
pthread_once(check_sigpipe_once, check_sigpipe_handler);
 #endif
+#endif
 
if (!conn)
return 0;
@@ -3183,11 +3185,19 @@
 }
 
 static pgthreadlock_t default_threadlock;
+
 static void
 default_threadlock(int acquire)
 {
 #ifdef ENABLE_THREAD_SAFETY
+#ifndef WIN32
static pthread_mutex_t singlethread_lock = PTHREAD_MUTEX_INITIALIZER;
+#else
+   static pthread_mutex_t singlethread_lock;
+static long mutex_initialized = 0;
+if (!InterlockedExchange(mutex_initialized, 1L))
+pthread_mutex_init(singlethread_lock, NULL);
+#endif
if (acquire)
pthread_mutex_lock(singlethread_lock);
else
Index: interfaces/libpq/fe-secure.c
===
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/libpq/fe-secure.c,v
retrieving revision 1.41
diff -u -r1.41 fe-secure.c
--- interfaces/libpq/fe-secure.c3 Jun 2004 00:13:19 -   1.41
+++ interfaces/libpq/fe-secure.c13 Jun 2004 19:14:00 -
@@ -864,8 +864,14 @@
 init_ssl_system(PGconn *conn)
 {
 #ifdef ENABLE_THREAD_SAFETY
-static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
-
+#ifndef WIN32
+static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
+#else
+static pthread_mutex_t init_mutex;
+static long mutex_initialized = 0L;
+if (!InterlockedExchange(mutex_initialized, 1L))
+pthread_mutex_init(init_mutex, NULL);
+#endif
pthread_mutex_lock(init_mutex);

if (pq_initssllib  pq_lockarray == NULL) {
@@ -1171,6 +1177,7 @@
 
 
 #ifdef ENABLE_THREAD_SAFETY
+#ifndef WIN32
 /*
  * Check SIGPIPE handler and perhaps install our own.
  */
@@ -1210,6 +1217,7 @@
if (!PQinSend())
exit(128 + SIGPIPE);/* typical return value for SIG_DFL */
 }
+#endif
 #endif
  
 /*
Index: interfaces/libpq/win32.mak
===
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/libpq/win32.mak,v
retrieving revision 1.24
diff -u -r1.24 win32.mak
--- interfaces/libpq/win32.mak  4 Jun 2004 13:30:04 -   1.24
+++ interfaces/libpq/win32.mak  13 Jun 2004 19:14:01 -
@@ -74,21 +74,25 @@
[EMAIL PROTECTED] $(OUTDIR)\$(OUTFILENAME)dll.lib
[EMAIL PROTECTED] $(INTDIR)\wchar.obj
[EMAIL PROTECTED] $(INTDIR)\encnames.obj
+   [EMAIL PROTECTED] $(INTDIR)\pthread-win32.obj
 
 
 
-config: ..\..\include\pg_config.h pg_config_paths.h
+config: ..\..\include\pg_config.h pthread.h pg_config_paths.h
 
 ..\..\include\pg_config.h: ..\..\include\pg_config.h.win32
copy ..\..\include\pg_config.h.win32 ..\..\include\pg_config.h
 
+pthread.h: pthread.h.win32
+   copy pthread.h.win32 pthread.h
+
 pg_config_paths.h: win32.mak
echo #define SYSCONFDIR  pg_config_paths.h
 
 $(OUTDIR) :
 if not exist 

Re: [PATCHES] Translation updates for 7.4/7.5: postgres-ru.po

2004-06-13 Thread Peter Eisentraut
Serguei Mokhov wrote:
 Here are a few updates, applicable to both 7.4 and
 7.5 branches. I doubt I'll have more time for additional
 translation work before Monday :(, so please apply
 these.

Done.


---(end of broadcast)---
TIP 8: explain analyze is your friend