Re: UPDATED UnixWare Threads Patch. - Mailing list pgsql-patches
From | Larry Rosenman |
---|---|
Subject | Re: UPDATED UnixWare Threads Patch. |
Date | |
Msg-id | 341710000.1060896405@lerlaptop.iadfw.net Whole thread Raw |
In response to | Re: UPDATED UnixWare Threads Patch. (Bruce Momjian <pgman@candle.pha.pa.us>) |
List | pgsql-patches |
That'll work. Thanks! LER --On Thursday, August 14, 2003 17:25:29 -0400 Bruce Momjian <pgman@candle.pha.pa.us> wrote: > > Oh, sorry. I am attaching the new template/unixware. How is this? > > ------------------------------------------------------------------------- > -- > > Larry Rosenman wrote: >> 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@candle.pha.pa.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@candle.pha.pa.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@lerctr.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@lerctr.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@lerctr.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@lerctr.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@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
pgsql-patches by date: