From: | <wespvp(at)syntegra(dot)com> |
---|---|
To: | PostgreSQL <pgsql-general(at)postgresql(dot)org> |
Subject: | thread_test.c problems |
Date: | 2004-04-03 21:40:01 |
Message-ID: | BC948B51.79D8%wespvp@syntegra.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general pgsql-hackers |
[Sorry, I hit the wrong butt on and sent this earlier before I meant to]
When I try to run thread_test.c from the CVS tip, it hangs in an infinite
CPU loop on both linux (RedHat AS 3.0, gcc 3.2.3) and Mac OS X 10.3.3 (gcc
3.3). I've also tried down to gcc 2.96 on Mac OS X.
If I compile it with -g instead of -O2 on linux, it runs to completion and
gives me:
Add this to your template/$port file:
STRERROR_THREADSAFE=yes
GETPWUID_THREADSAFE=no
GETHOSTBYNAME_THREADSAFE=no
On Mac OS X, it gives me:
Add this to your template/$port file:
STRERROR_THREADSAFE=yes
GETPWUID_THREADSAFE=yes
GETHOSTBYNAME_THREADSAFE=yes
If I modify the two while loops
while (errno2_set == 0)
while (errno1_set == 0)
To execute a 'print' statement or a 'time(NULL)' instead of a null loop,
then it runs to completion with -O2.
If I run the 7.4.2 released version of thread_test.c, for both platforms I
get:
Add this to your template/$port file:
NEED_REENTRANT_FUNCS=yes
There seems to be two problems
1. It would appear the compiler is optimizing the while loop to be an
infinite loop. Other explanations?
2. The answers both can't be right... On OS X, the 7.4.2 version says
NEED_REENTRANT_FUNCS=yes, but with the tip version it says all are thread
safe.
On linux, the make run (putting 'time(NULL)' in the loop):
make
gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -I../../../src/include -D_GNU_SOURCE -c -o
thread_test.o thread_test.c -MMD
gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -L../../../src/port
-Wl,-rpath,/wdisk/wrp/opensrc/as30/local/pgsql7.4.2/lib -lpthread
thread_test.o -lz -lcrypt -lresolv -lnsl -ldl -lm -lbsd -lpgport -o
thread_test
[wrp(at)juniper thread]$ !.
./thread_test
Make sure you have added any needed 'THREAD_CPPFLAGS' and 'THREAD_LIBS'
defines to your template/$port file before compiling this program.
Add this to your template/$port file:
STRERROR_THREADSAFE=yes
GETPWUID_THREADSAFE=no
GETHOSTBYNAME_THREADSAFE=no
From | Date | Subject | |
---|---|---|---|
Next Message | Joe Stump | 2004-04-04 00:46:37 | Recursive FOREIGN KEY? |
Previous Message | Wes Palmer | 2004-04-03 21:32:48 | thread_test.c problems |
From | Date | Subject | |
---|---|---|---|
Next Message | Joe Conway | 2004-04-03 23:05:40 | Re: Better support for whole-row operations and composite |
Previous Message | Greg Stark | 2004-04-03 21:35:26 | Re: Inconsistent behavior on Array & Is Null? |