Re: BUG #1044: snprintf() shipped with PostgreSQL is not thread - Mailing list pgsql-bugs

From Bruce Momjian
Subject Re: BUG #1044: snprintf() shipped with PostgreSQL is not thread
Date
Msg-id 200401081715.i08HFQQ28979@candle.pha.pa.us
Whole thread Raw
In response to Re: BUG #1044: snprintf() shipped with PostgreSQL is not thread safe  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: BUG #1044: snprintf() shipped with PostgreSQL is not thread safe
List pgsql-bugs
Tom Lane wrote:
> "PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
> > Some OSes lack proper snprintf()/vsnprintf() fuctions so PostgreSQL includes
> > its own version (src/port/snprintf.c) during building. Unfortunately, this
> > version of snprintf() is not reentrant (it uses global vars to keep internal
> > state), so for example running libpq-based concurrent applications (threads)
> > causes libpq fuctions to fail sometimes.
>
> What platforms have workable thread support but not snprintf?  I think
> this change is not likely to accomplish much except clutter the snprintf
> code ...

What we could do is to throw a compile #error if you hit our own
snprintf() and are compiling with threads enabled.

Patch attached and applied.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/port/snprintf.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/port/snprintf.c,v
retrieving revision 1.2
diff -c -c -r1.2 snprintf.c
*** src/port/snprintf.c    29 Nov 2003 22:41:31 -0000    1.2
--- src/port/snprintf.c    8 Jan 2004 17:12:47 -0000
***************
*** 35,40 ****
--- 35,45 ----
  /* might be in either frontend or backend */
  #include "postgres_fe.h"

+ #ifdef ENABLE_THREAD_SAFETY
+ #error    The replacement snprintf() is not thread-safe.  \
+ Your platform must have a thread-safe snprintf() to compile with threads.
+ #endif
+
  #include <sys/ioctl.h>
  #include <sys/param.h>


pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #1044: snprintf() shipped with PostgreSQL is not thread safe
Next
From: Tom Lane
Date:
Subject: Re: BUG #1044: snprintf() shipped with PostgreSQL is not thread safe