|
Home > Archive > Porting PostgreSQL > July 2005 > Re: pthreads issue when compiling 7.4.8 on AIX 5.3 -- RESOLVED
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Re: pthreads issue when compiling 7.4.8 on AIX 5.3 -- RESOLVED
|
|
| Mohan, Ross 2005-07-13, 11:23 am |
| *thank you* !!
Please keep us posted on socket bug progress, is that possible?
-----Original Message-----
From: pgsql-ports-owner@postgresql.org [mailto:pgsql-ports-owner@postgresql.org] On Behalf Of Andrew Hammond
Sent: Wednesday, July 13, 2005 10:22 AM
To: pgsql-ports@postgresql.org
Subject: Re: [PORTS] pthreads issue when compiling 7.4.8 on AIX 5.3 -- RESOLVED
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I spoke with our IBM sales reps about this and they suggested we upgrade GCC to 3.3.3 or later. Their PMR for this is PMR25534,077,649 if you happen to need the reference. We upgraded to 4.0.1 and got it to compile.
We're now seeing the same socket bug as everyone else. Chris Browne filed a bug report with IBM and has opened PMR29657,500. We hope to see resolution shortly.
- --
Andrew Hammond 416-673-4138 ahammond@ca.afilias.info
Database Administrator, Afilias Canada Corp.
CB83 2838 4B67 D40F D086 3568 81FC E7E5 27AF 4A9A
Andrew Hammond wrote:[color=darkred
]
> Sure enough, there's some _XOPEN_SOURCE magic around them:
>
> #if (_XOPEN_SOURCE >= 600)
> typedef struct
> {
> #ifdef __64BIT__
> long __sp_word[3];
> #else
> int __sp_word[6];
> #endif /* __64BIT__ */
> }
> pthread_spinlock_t;
>
> typedef struct
> {
> #ifdef __64BIT__
> long __br_word[5];
> #else
> int __br_word[8];
> #endif /* __64BIT__ */
> }
> pthread_barrier_t;
> #endif /* _XOPEN_SOURCE >= 600 */
>
>
> #if (_XOPEN_SOURCE >= 600)
> typedef void *pthread_barrierattr
_t;
> #endif
>
>
> So... I went hunting to see where _XOPEN_SOURCE is defined and found
> it in standards.h which is included all over the place, including
> sys/types.h
>
>
> /* If _XOPEN_SOURCE is defined without a value, or with a value less
> * than 500 (UNIX98), then set a value, so that #if statements will
> * work properly.
> */
> #ifdef _XOPEN_SOURCE
> #if ((_XOPEN_SOURCE + 0) < 500)
> #undef _XOPEN_SOURCE
> #define _XOPEN_SOURCE 1
> #endif
> #endif
>
> #if defined(_UNIX03) || (_XOPEN_SOURCE==600)
> #undef _XOPEN_SOURCE
> #define _XOPEN_SOURCE 600
> #undef _XOPEN_SOURCE_EXTEND
ED
> #define _XOPEN_SOURCE_EXTEND
ED 1
> #undef _POSIX_C_SOURCE
> #define _POSIX_C_SOURCE 200112L
> #undef _THREAD_SAFE
> #define _THREAD_SAFE
> #endif
>
> #if defined(_UNIX98) || (_XOPEN_SOURCE==500)
> #undef _XOPEN_SOURCE
> #define _XOPEN_SOURCE 500
> #undef _XOPEN_SOURCE_EXTEND
ED
> #define _XOPEN_SOURCE_EXTEND
ED 1
> #endif
>
> #ifdef _UNIX95
> #undef _XOPEN_SOURCE_EXTEND
ED
> #define _XOPEN_SOURCE_EXTEND
ED 1
> #endif
>
> #if (_XOPEN_SOURCE_EXTEN
DED==1)
> #ifndef _XOPEN_SOURCE
> #define _XOPEN_SOURCE 1
> #endif /* _XOPEN_SOURCE */
> #endif /* _XOPEN_SOURCE_EXTEND
ED */
>
> #ifdef _XOPEN_SOURCE
> #ifndef _POSIX_SOURCE
> #define _POSIX_SOURCE
> #endif
> #endif
>
>
> I also made sure that it's not being defined or undefined anywhere
> else in the include paths. Then, I tried overriding the _XOPEN_SOURCE
> variable on the command line for gcc, but, still no luck.
>
> -bash-2.05b$ gcc -O2 -fno-strict-aliasing -g -Wall
> -Wmissing-prototypes -Wmissing-declarations -I../../../src/include
> -I/opt/dbs/readline/include -I/opt/dbs/zlib/include
> -I/opt/freeware/include -D _XOPEN_SOURCE=600 -c -o thread_test.o
> thread_test.c In file included from thread_test.c:23:
> /usr/include/pthread.h:652: error: parse error before '*' token
> /usr/include/pthread.h:655: error: parse error before '*' token
> /usr/include/pthread.h:658: error: parse error before '*' token
> /usr/include/pthread.h:661: error: parse error before '*' token
> /usr/include/pthread.h:664: error: parse error before '*' token
> /usr/include/pthread.h:672: error: parse error before '*' token
> /usr/include/pthread.h:675: error: parse error before '*' token
> /usr/include/pthread.h:678: error: parse error before '*' token
> /usr/include/pthread.h:681: error: parse error before '*' token
> /usr/include/pthread.h:689: error: parse error before '*' token
> /usr/include/pthread.h:693: error: parse error before '*' token
> /usr/include/pthread.h:696: error: parse error before '*' token
>
> I'd like to believe I'm missing something really obvious here... :)
>
> --
> Andrew Hammond 416-673-4138 ahammond@ca.afilias.info
> Database Administrator, Afilias Canada Corp.
> CB83 2838 4B67 D40F D086 3568 81FC E7E5 27AF 4A9A
>
>
> Bruce Momjian wrote:
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Darwin)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFC1SOCgfzn5Sev
SpoRAjsGAKDG3EkPdnxg
IIC+z8vpCTfLoi7iIACe
OUs1
pomEePohqz7wE5ly7+lV
Q8k=
=M1Qr
-----END PGP SIGNATURE-----
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend
---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faq
| |
| Chris Browne 2005-07-14, 11:24 am |
| RMohan@arbinet.com ("Mohan, Ross") writes:
> *thank you* !!
>
> Please keep us posted on socket bug progress, is that possible?
More news today...
---------------------------------------------------------------------
"We have escalated PMR29657 and now have a resolution.
We have spoken directly with the lead developer of the socket.h header
files:
The immediate resolution is to alter _SS_MAXSIZE to = 1025 in
/usr/include/sys/socket.h (as was suggested by Chris Browne).
This will resolve the immediate problem.
IBM will be providing a fix in the next maintenance release with an
updated socket.h."
-----------------------------------------------------------------------
That differs a bit from what Bull suggested a while back, though I
wouldn't be surprised (and would be quite pleased) if the next AIX 5.3
maintenance release used some sort of calculated value rather than
1025.
In any case, s/128/1025/ seems to be the resolution to the problem,
for now. It'll presumably have the same effect for PostgreSQL 8.x
too.
I'm not sure if it's worth adding a test case into the PostgreSQL
configure script to watch for this issue; if it is, the following
would characterize the test...
---------------------------------------------------------------
#include <stdio.h>
#include <sys/un.h>
#include <sys/socket.h>
int main (int argc, char *argv[]) {
struct sockaddr_storage a;
struct sockaddr_un b;
printf("Size of sockadr_storage: %d\n", sizeof(a));
printf ("Size of sockaddr_un:%d\n", sizeof(b));
if (sizeof(a) >= sizeof(b))
printf ("Conformant to RFC 3493\n");
else
printf ("Non-conformant to RFC 3493\n");
}
---------------------------------------------------------------
I suppose I should submit a patch to the AIX FAQ to reflect this
issue...
--
(format nil "~S@~S" "cbbrowne" "acm.org")
http://www.ntlug.org/~cbbrowne/sap.html
Rules of the Evil Overlord #78. "I will not tell my Legions of Terror
"And he must be taken alive!" The command will be: ``And try to take
him alive if it is reasonably practical.''"
<http://www.eviloverlord.com/>
|
|
|
|
|