Re: Libpq driver: thread problem - Mailing list pgsql-odbc
From | Bruce Momjian |
---|---|
Subject | Re: Libpq driver: thread problem |
Date | |
Msg-id | 200508122112.j7CLCJ414220@candle.pha.pa.us Whole thread Raw |
In response to | Re: Libpq driver: thread problem (Marko Ristola <Marko.Ristola@kolumbus.fi>) |
List | pgsql-odbc |
This has been saved for the 8.2 release: http://momjian.postgresql.org/cgi-bin/pgpatches_hold --------------------------------------------------------------------------- Marko Ristola wrote: > > I remember, that psqlodbc depends on ANSI C locale features. > ANSI C locale settings are not thread safe. > > setlocale() functions are not thread safe in Windows and not in Linux: > > convert.c: saved_locale = > strdup(setlocale(LC_ALL, NULL)); > convert.c: setlocale(LC_ALL, "C"); > convert.c: setlocale(LC_ALL, saved_locale); > convert.c: saved_locale = > strdup(setlocale(LC_ALL, NULL)); > convert.c: setlocale(LC_ALL, "C"); > convert.c: setlocale(LC_ALL, saved_locale); > > They should be replaced with thread safe alternatives, when proven > thread safety > is required. Of course, this might work, if there is only a single > connection > and a single statement with many threads and no other application feature > depends on the global locale setting. > > I think, that UTF-8 could be used internally under both Linux and Windows. > It would simplify the psqlodbc driver. Maybe SQL_ASCII would be the > exception. > Under Linux, there is iconv() function API, that can be used for the needed > thread safe conversion object. > > Under Windows, the setlocale() function is thread local, if the > following code > is called: > > _configthreadlocale(_ENABLE_PER_THREAD_LOCALE); > > > Is psqlodbc thread safe in Windows, if that is defined within main() > function? > > > There is an example about thread local locales near the bottom of page > http://msdn2.microsoft.com/library/x99tb11d(en-us,vs.80).aspx > > I don't know any other thread safe locale API within Windows. > > Could we use libicu under Linux and Windows? Is it thread safe? > Could we hide the locale details within libpq and just use it's > thread safe features? > > Marko Ristola > > > Bruce Momjian wrote: > > >Dave Page wrote: > > > > > >>>The main issue with the flag, as I remember, is to allow multiple > >>>threads to open libpq connections. If you don't do that, you > >>>don't need > >>>the flag. > >>> > >>> > >>In which case it definitely needs fixing. Which may be a non-trivial > >>task as pthreads on Windows is not currently used by PostgreSQL, and > >>didn't want to play last time I looked at it :-( However... > >> > >>I did look at this very briefly before speaking to Magnus. The first > >>problem I ran into was that configure was insisting that posix signals > >>were needed to enable thread safety. Before I spend lots of time looking > >>at the code do you know if it is safe for me to assume our signal > >>emaulation will do that job in all the right places? If so, I guess it's > >>just a case of fixing the pthread detection and linker flags. > >> > >> > > > >Ewe. I bet we added that test program _after_ we got threads working on > >Win32. That program, and the flags detection configure checks have made > >threads configuration almost fool-proof, so I don't think we should > >change any of that. > > > >As far as the Win32 API, I am unsure. Let me see if I can hack up > >thread_test.c to use libpq/pthread-win32.c to see if I can get that > >working. > > > > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 3: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faq > -- 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
pgsql-odbc by date: