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 21:16:11
Message-ID: 329340000.1060895771@lerlaptop.iadfw.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-patches

The -Kpthread is only valid for cc, not gcc. on gcc you need
-pthread without the leading K.

(My patch had it, but buried in the POSIX_GETPWUID_R noise).

LER

--On Thursday, August 14, 2003 17:13:56 -0400 Bruce Momjian
<pgman(at)candle(dot)pha(dot)pa(dot)us> wrote:

>
> Sorry, patch attached and applied. I also added "SUPPORTS_THREADS=yes",
> which was needed.
>
> -------------------------------------------------------------------------
> --
>
> Larry Rosenman wrote:
>> 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

--
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 Bruce Momjian 2003-08-14 21:25:29 Re: UPDATED UnixWare Threads Patch.
Previous Message Bruce Momjian 2003-08-14 21:15:09 Re: [PATCHES] UPDATED UnixWare Threads Patch.

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2003-08-14 21:25:29 Re: UPDATED UnixWare Threads Patch.
Previous Message Bruce Momjian 2003-08-14 21:15:09 Re: [PATCHES] UPDATED UnixWare Threads Patch.