Skip site navigation (1) Skip section navigation (2)

Re: UPDATED UnixWare Threads Patch.

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Larry Rosenman <ler(at)lerctr(dot)org>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: UPDATED UnixWare Threads Patch.
Date: 2003-08-14 21:13:56
Message-ID: 200308142113.h7ELDun08636@candle.pha.pa.us (view raw or flat)
Thread:
Lists: pgsql-hackerspgsql-patches
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
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman(at)candle(dot)pha(dot)pa(dot)us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

In response to

Responses

pgsql-hackers by date

Next:From: Bruce MomjianDate: 2003-08-14 21:15:09
Subject: Re: [PATCHES] UPDATED UnixWare Threads Patch.
Previous:From: Carlos Guzman AlvarezDate: 2003-08-14 20:53:46
Subject: Re: SSL Connection / Windows + Cygwin + PostgreSQL 7.4

pgsql-patches by date

Next:From: Bruce MomjianDate: 2003-08-14 21:15:09
Subject: Re: [PATCHES] UPDATED UnixWare Threads Patch.
Previous:From: Tom LaneDate: 2003-08-14 15:14:28
Subject: Re: fix for acls with usernames that have " characters in them.

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group