Re: Unixware Patch (Was: Re: Beta2 Tag'd and Bundled ...)

From: Larry Rosenman <ler(at)lerctr(dot)org>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: Greg Stark <gsstark(at)mit(dot)edu>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Unixware Patch (Was: Re: Beta2 Tag'd and Bundled ...)
Date: 2003-09-02 15:34:51
Message-ID: 88370000.1062516891@lerlaptop.iadfw.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

--On Tuesday, September 02, 2003 11:32:08 -0400 Bruce Momjian
<pgman(at)candle(dot)pha(dot)pa(dot)us> wrote:

> Larry Rosenman wrote:
>> > Where does it say that you have to use getpwuid_r() to be thread safe?
>> > I don't see any mention in the docs. It does say about getpwuid:
>> >
>> > For getpwent, getpwuid, getpwnam, setpwent, endpwent, and
>> > fgetpwent, all information is contained in a static area, so it
>> > must be copied if it is to be
>> >
>> > but that in itself doesn't mean it isn't thread safe. If you are not
>> > sure, would you write a little thread program to test if it works if
>> > two threads try it at the same time.
>> I only have a UP box.
>>
>> Since the _r version uses OUR OWN buffer, it is safer to use
>> the _r version.
>>
>> Since we do NOT have the _r alternative for strerror and
>> gethostbyname, that's the best we can do.
>
> Uh, that's not the logic I use. I have some *_r functions on BSD/OS,
> but the normal libc functions are thread-safe, so I just use those. I
> think I have the *_r functions because the standards require them to
> exist, not because they are required for thread-safety, and like
> Unixware, I have some of them, but not others (no strerror_r). Because
> Unixware is similar in that it has some *_r functions and not others, I
> want to know if getpwuid_r() is required.
>
> gethostbyname() also returns data from a static area. Why is that
> thread-safe on Unixware and getpwuid() is not? My guess is that both
> are thread-safe but some software requires getpwuid_r() so they added
> it. Again, on those OS's, it is better to just use the libc versions.
>
> "Safer" isn't an issue. Either it is safe or unsafe. I also don't care
> about locking overhead in the libc versions of these functions.
My take is unless otherwise stated, all libc functions are thread-safe on
UnixWare.
the *_r functions are better if available as they require the USER to
allocate/pass
their OWN buffer. We should use those (that's the signature we use in
src/port/thread.c),
but if they don't exist, we should just use the non-*_r version.

If the OS supports threads, this *should* work.

My $0.02.

LER

--
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

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 2003-09-02 15:35:25 Re: Unixware Patch (Was: Re: Beta2 Tag'd and Bundled ...)
Previous Message Bruce Momjian 2003-09-02 15:32:08 Re: Unixware Patch (Was: Re: Beta2 Tag'd and Bundled ...)