Re: Thread Safety of ODBC Driver

From: Hiroshi Inoue <Inoue(at)tpf(dot)co(dot)jp>
To: Jason Koeninger <jkoenin(at)jjcc(dot)com>
Cc: "pgsql-odbc(at)postgresql(dot)org" <pgsql-odbc(at)postgresql(dot)org>
Subject: Re: Thread Safety of ODBC Driver
Date: 2002-09-09 01:59:59
Message-ID: 3D7C009F.385D115@tpf.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Sorry for the delay.
I have little time to spare for psqlodbc now.

I've developped psqlodbc mainly from Windows side.
I've planned a trial thread-safe implementation
under Windows.
As for unix I knew about a few xxx_r functions but
I don't know details about it and unfortunately
there's no developper from unix side.
I'm very happy if someone would take care of the
driver from unix side.

Jason Koeninger wrote:
>
> Here's a list of the issues I found. Since you've dealt with the statics,
> I won't worry about those.
>
> connection.c: Uses strtok. Could convert to strtok_r. On FreeBSD,
> I used strsep.
>
> convert.c: localtime used in copy_and_convert_field and
> copy_statement_with_parameters. Use localtime_r and create
> another struct tm to use as the extra argument.
>
> environ.c: The "conns" global at the start of the file could be a
> problem. Looks like the only reason it's used is to commit all
> connections on a single HENV at once if SQLTransact receives
> a NULL HDBC. If it's necessary that the array exist, you'll have
> to serialize access somehow.
>
> execute.c: Uses the conns global in PGAPI_Transact.

My plan under Windows is to use CriticalSection to serialize
the access to conns global.

> gpps.c: The Unix implementation of Windows INI files has a
> couple functions I'm not as familiar with, but I think they may be
> a problem. getpwuid and getuid. I believe they return pointers
> to statics, don't they?

gpps.c is used with neither iDOBC nor unixODBC.
I have no interest for standalone driver.

> misc.c: Also has some getpwuid and getuid calls. mylog and
> qlog probably need to be serialized, but they shouldn't cause a
> crash.

I would also use another CriticalSection to serialize the
access to mylog or qlog.

> socket.c: Uses gethostbyname. Some platforms have a
> gethostbyname_r, but the implementations vary. I know in my
> class libraries, I have a different implementation across
> Linux, Solaris, FreeBSD, Windows, and OS/2. On FreeBSD,
> you can use mutexes to serialize gethostbyname or use the
> function getipnodebyname. The others either have a gethostbyname
> that returns thread local storage or a gethostbyname_r
> variation.
>
> The problem with these fixes is that, at least in FreeBSD, you
> have to compile with the -pthread option to get some of the
> normal C library functions to work safely in a threaded environment.
> Some of the functions are also only defined in libc_r so some of
> these fixes may require precompiler directives and makefile changes
> if you want a thread-safe driver.

The development of psqlodbc was moved to GBorg
(http://gborg.postgresql.org/project/psqlodbc/projdisplay.php)
and psqlodbc could have its own release cycle.
As for Windows there's no problem. However as for
*nixes, the *make* may be broken. I'm happy if you
can figure out how to manage it together with
the thread-safe option.

regards,
Hiroshi Inoue
http://w2422.nsk.ne.jp/~inoue/

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Jason Koeninger 2002-09-09 02:37:41 Re: Thread Safety of ODBC Driver
Previous Message Allan 2002-09-08 13:15:30 unsubscribe