Re: Unixware Patch (Was: Re: Beta2 Tag'd and Bundled ...)
От | Larry Rosenman |
---|---|
Тема | Re: Unixware Patch (Was: Re: Beta2 Tag'd and Bundled ...) |
Дата | |
Msg-id | 88370000.1062516891@lerlaptop.iadfw.net обсуждение исходный текст |
Ответ на | Re: Unixware Patch (Was: Re: Beta2 Tag'd and Bundled ...) (Bruce Momjian <pgman@candle.pha.pa.us>) |
Список | pgsql-hackers |
--On Tuesday, September 02, 2003 11:32:08 -0400 Bruce Momjian <pgman@candle.pha.pa.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@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
В списке pgsql-hackers по дате отправления: