Re: UPDATED UnixWare Threads Patch.

From: Larry Rosenman <ler(at)lerctr(dot)org>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: UPDATED UnixWare Threads Patch.
Date: 2003-08-14 09:04:40
Message-ID: 11670000.1060851880@lerlaptop.lerctr.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-patches

what about the pieces of src/port/unixware to allow the threads stuff?

--On Thursday, August 14, 2003 01:25:48 -0400 Bruce Momjian
<pgman(at)candle(dot)pha(dot)pa(dot)us> wrote:

>
> OK, I have applied the attached patch.
>
> Here is the comment I have added to the thread.c file:
>
> /*
> * Threading sometimes requires specially-named versions of functions
> * that return data in static buffers, like strerror_r() instead of
> * strerror(). Other operating systems use pthread_setspecific()
> * and pthread_getspecific() internally to allow standard library
> * functions to return static data to threaded applications.
> *
> * Additional confusion exists because many operating systems that
> * use pthread_setspecific/pthread_getspecific() also have *_r versions
> * of standard library functions for compatibility with operating
> systems * that require them. However, internally, these *_r
> functions merely * call the thread-safe standard library functions.
> *
> * For example, BSD/OS 4.3 uses Bind 8.2.3 for getpwuid(). Internally,
> * getpwuid() calls pthread_setspecific/pthread_getspecific() to return
> * static data to the caller in a thread-safe manner. However, BSD/OS
> * also has getpwuid_r(), which merely calls getpwuid() and shifts
> * around the arguments to match the getpwuid_r() function declaration.
> * Therefore, while BSD/OS has getpwuid_r(), it isn't required. It
> also * doesn't have strerror_r(), so we can't fall back to only using
> *_r * functions for threaded programs.
> *
> * The current setup is to assume either all standard functions are
> * thread-safe (NEED_REENTRANT_FUNC_NAMES=no), or the operating system
> * requires reentrant function names (NEED_REENTRANT_FUNC_NAMES=yes).
> */
>
> As an additional data point, here is a README comment from Bind 8.2.3:
>
> Thread Safety:
>
> It is possible for a thread safe program to be altered to call
> the underlying interface (rather than the standard getXbyY() stubs) and
> get some reentrance capabilities. Note that the underlying libraries
> (which we call) are not all thread-safe, for example, the YP and DNS
> resolvers. A lot more work will need to be done before we have full
> thread safety. But we believe that the native API for this system does
> not impose any reentrancy problems. We don't use global or static
> variables anywhere except in the getXbyY() stubs.
>
> Here is Bind's gethostbyname_r:
>
> HOST_R_RETURN
> gethostbyname_r(const char *name, struct hostent *hptr, HOST_R_ARGS) {
> struct hostent *he = gethostbyname(name);
>
> HOST_R_ERRNO;
>
> if (he == NULL)
> return (HOST_R_BAD);
>
> return (copy_hostent(he, hptr, HOST_R_COPY));
> }
>
> As you can see, it merely calls gethostbyname() and adjusts to return
> the proper values.
>
> I removed the pre-POSIX getpwuid_r function call and added the POSIX
> one. If we need the pre-POSIX one, we can add it with a configure
> test, but I would rather find out if someone needs it first. The
> original thread patch that was posted had only the pre-POSIX version of
> the function, and I am not sure why the didn't include the POSIX one
> too, or use that instead of the pre-POSIX one.
>
> There are also a few stylistic function declaration cleanups.
>
> The unixware optimizer changes have already been applied.
>
>
> -------------------------------------------------------------------------
> --
>
> Larry Rosenman wrote:
>>
>>
>> --On Friday, August 08, 2003 18:56:45 -0500 Larry Rosenman
>> <ler(at)lerctr(dot)org> wrote:
>>
>> >
>> >
>> > Here is the updated UnixWare threads patch. I need some help to set
>> > the HAVE_POSIX_GETPWUID_R define from configure, but this will suffice
>> > for now.
>> >
>> > This also includes my recommendation for the Compiler Bug issue.
>> >
>> > Please Apply, and if one of the configure guru's can help here, I'd be
>> > most appreciative.
>> Grr. I'm an idiot, the following is a CORRECTED version, basically
>> s/#elsif/#elif/
>>
>> Index: src/port/thread.c
>> ===================================================================
>> RCS file: /projects/cvsroot/pgsql-server/src/port/thread.c,v
>> retrieving revision 1.2
>> diff -u -r1.2 thread.c
>> --- src/port/thread.c 8 Aug 2003 03:09:56 -0000 1.2
>> +++ src/port/thread.c 9 Aug 2003 00:47:00 -0000
>> @@ -40,13 +40,18 @@
>> pqGetpwuid(uid_t uid, struct passwd * resultbuf, char *buffer,
>> size_t buflen, struct passwd ** result)
>> {
>> -#if defined(USE_THREADS) && defined(HAVE_GETPWUID_R)
>> +#if defined(USE_THREADS) && defined(HAVE_GETPWUID_R) &&
>> !defined(HAVE_POSIX_GETPWUID_R)
>>
>> /*
>> * broken (well early POSIX draft) getpwuid_r() which returns 'struct
>> * passwd *'
>> */
>> *result = getpwuid_r(uid, resultbuf, buffer, buflen);
>> +#elif defined(USE_THREADS) && defined(HAVE_GETPWUID_R) &&
>> defined(HAVE_POSIX_GETPWUID_R)
>> + /*
>> + * SUSv2/POSIX getpwuid_r
>> + */
>> + return getpwuid_r(uid, resultbuf, buffer, buflen, result);
>> # else
>> /* no getpwuid_r() available, just use getpwuid() */
>> *result = getpwuid(uid);
>> Index: src/template/unixware
>> ===================================================================
>> RCS file: /projects/cvsroot/pgsql-server/src/template/unixware,v
>> retrieving revision 1.11
>> diff -u -r1.11 unixware
>> --- src/template/unixware 4 Sep 2002 22:54:18 -0000 1.11
>> +++ src/template/unixware 9 Aug 2003 00:47:00 -0000
>> @@ -1,5 +1,13 @@
>> +SUPPORTS_THREADS=yes
>> if test "$GCC" = yes; then
>> - CFLAGS=-O2
>> + CFLAGS="-O2 -DHAVE_POSIX_GETPWUID_R"
>> + THREAD_CFLAGS="-pthread -D_REENTRANT"
>> + NEED_REENTRANT_FUNC_NAMES=yes
>> else
>> - CFLAGS='-O -K inline'
>> +# the -Kno_host is temporary for a bug in the compiler. See -hackers
>> +# discussion on 7-8/Aug/2003.
>> +# when the 7.1.3UP3 or later compiler is out, we can do a version check.
>> + CFLAGS='-O -Kinline,no_host -DHAVE_POSIX_GETPWUID_R'
>> + THREAD_CFLAGS="-D_REENTRANT -K pthread -DHAVE_POSIX_GETPWUID_R"
>> + NEED_REENTRANT_FUNC_NAMES=yes
>> fi
>>
>> --
>> Larry Rosenman http://www.lerctr.org/~ler
>> Phone: +1 972-414-9812 E-Mail: ler(at)lerctr(dot)org
>> US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
>
> [ Attachment, skipping... ]
>
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 4: Don't 'kill -9' the postmaster

--
Larry Rosenman http://www.lerctr.org/~ler
Phone: +1 972-414-9812 E-Mail: ler(at)lerctr(dot)org
US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bertrand Petit 2003-08-14 10:21:30 7.4 beta 1 getting out of swap
Previous Message Neil Conway 2003-08-14 06:06:41 Re: Statement-level Triggers

Browse pgsql-patches by date

  From Date Subject
Next Message Tom Lane 2003-08-14 10:55:40 Re: [BUGS] 7.4 beta 1: SET log_statement=false
Previous Message Bruce Momjian 2003-08-14 05:25:48 Re: UPDATED UnixWare Threads Patch.