Re: thread safety tests

From: Jan Wieck <JanWieck(at)Yahoo(dot)com>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: thread safety tests
Date: 2004-06-09 15:47:43
Message-ID: 40C7311F.20201@Yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 6/9/2004 11:16 AM, Bruce Momjian wrote:

> Jan Wieck wrote:
>> On 6/9/2004 9:36 AM, Bruce Momjian wrote:
>>
>> > Jan Wieck wrote:
>> >> I am wondering why thread_test.c is checking for mktemp()? That function
>> >> is nowhere used in the libpq.
>> >
>> > Uh, it isn't checking for mktemp, it is using it, and it is using it
>> > because someone didn't like hard-coded paths I was using in the past.
>> > Is there something wrong with using mktemp? I have heard of no
>> > portability problems, except some need six X's, and we updated that.
>>
>> There seems to be a portability issue here. Stefan Kaltenbrunner
>> reported a configure failure on sparc64-unknown-openbsd3.5 and the
>> config.log says:
>>
>> /tmp//ccx22029.o: In function `main':
>> /tmp//ccx22029.o(.text+0x8c): warning: mktemp() possibly used unsafely;
>> consider
>> using mkstemp()
>
> Yes, I was wondering how mktemp was going to guard against concurrent
> access. I have applied the following patch to use mkstemp().
>
>> Which is only a warning at this time, it fails later on getpwuid().
>
> Oh, I will need to hear more about that failure.

The relevant part of the config.log is:

configure:17942: checking thread safety of required library functions
configure:17967: gcc -o conftest -O2 -fno-strict-aliasing -pthread
-D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -DIN_CONFIGURE
conftest.c -lz -lreadline -lcurses -lresolv -lcompat -lm
-lutil >&5
/tmp//ccx22029.o: In function `main':
/tmp//ccx22029.o(.text+0x8c): warning: mktemp() possibly used unsafely;
consider using mkstemp()
configure:17970: $? = 0
configure:17972: ./conftest
Your errno is thread-safe.
Your system has sterror_r(); it does not need strerror().
Your system uses getpwuid() which is not thread-safe. **
Your system has getaddrinfo(); it does not need gethostbyname()
or gethostbyname_r().

** YOUR PLATFORM IS NOT THREAD-SAFE. **
configure:17975: $? = 1
configure: program exited with status 1
configure: failed program was:
#line 17961 "configure"
#include "confdefs.h"
#include "./src/tools/thread/thread_test.c"
configure:17984: result: no
configure:17986: error:
*** Thread test program failed. Your platform is not thread-safe.
*** Check the file 'config.log'for the exact reason.

>
>
>
> ------------------------------------------------------------------------
>
> Index: src/tools/thread/thread_test.c
> ===================================================================
> RCS file: /cvsroot/pgsql-server/src/tools/thread/thread_test.c,v
> retrieving revision 1.30
> diff -c -c -r1.30 thread_test.c
> *** src/tools/thread/thread_test.c 28 May 2004 18:37:10 -0000 1.30
> --- src/tools/thread/thread_test.c 9 Jun 2004 15:03:29 -0000
> ***************
> *** 104,110 ****
> {
> pthread_t thread1,
> thread2;
> !
> if (argc > 1)
> {
> fprintf(stderr, "Usage: %s\n", argv[0]);
> --- 104,111 ----
> {
> pthread_t thread1,
> thread2;
> ! int fd;
> !
> if (argc > 1)
> {
> fprintf(stderr, "Usage: %s\n", argv[0]);
> ***************
> *** 120,130 ****
> /* Make temp filenames, might not have strdup() */
> temp_filename_1 = malloc(strlen(TEMP_FILENAME_1) + 1);
> strcpy(temp_filename_1, TEMP_FILENAME_1);
> ! mktemp(temp_filename_1);
>
> temp_filename_2 = malloc(strlen(TEMP_FILENAME_2) + 1);
> strcpy(temp_filename_2, TEMP_FILENAME_2);
> ! mktemp(temp_filename_2);
>
> #if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R)
> if (gethostname(myhostname, MAXHOSTNAMELEN) != 0)
> --- 121,133 ----
> /* Make temp filenames, might not have strdup() */
> temp_filename_1 = malloc(strlen(TEMP_FILENAME_1) + 1);
> strcpy(temp_filename_1, TEMP_FILENAME_1);
> ! fd = mkstemp(temp_filename_1);
> ! close(fd);
>
> temp_filename_2 = malloc(strlen(TEMP_FILENAME_2) + 1);
> strcpy(temp_filename_2, TEMP_FILENAME_2);
> ! fd = mkstemp(temp_filename_2);
> ! close(fd);
>
> #if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R)
> if (gethostname(myhostname, MAXHOSTNAMELEN) != 0)

--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck(at)Yahoo(dot)com #

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Greg Stark 2004-06-09 15:49:12 Re: Assignment to array elements
Previous Message Bruce Momjian 2004-06-09 15:45:14 Re: thread safety tests