[Python-Dev] pthreads question: typedef ??? pthread_t and hacky return statements (original) (raw)

Trent Mick trentm@ActiveState.com
Wed, 16 Aug 2000 17:24:25 -0700


I am porting Python to Monterey (64-bit AIX) and have a small (hopefully) question about POSIX threads. I have Monterey building and passing the threads test suite using Python/thread_pthread.h with just one issue:

-------------- snipped from current thread_pthread.h --------------- long PyThread_get_thread_ident(void) { volatile pthread_t threadid; if (!initialized) PyThread_init_thread(); /* Jump through some hoops for Alpha OSF/1 */ threadid = pthread_self(); return (long) *(long *) &threadid; }

Does the POSIX threads spec specify a C type or minimum size for pthread_t? Or can someone point me to the appropriate resource to look this up. On Linux (mine at least): /usr/include/bits/pthreadtypes.h:120:typedef unsigned long int pthread_t;

On Monterey: typedef unsigned int pthread_t;

That is fine, they are both 32-bits, however Monterey is an LP64 platform (sizeof(long)==8, sizeof(int)=4), which brings up the question:

WHAT IS UP WITH THAT return STATEMENT? return (long) *(long *) &threadid;

My guess is that this is an attempt to just cast 'threadid' (a pthread_t) to a long and go through hoops to avoid compiler warnings. I dont' know what else it could be. Is that what the "Alpha OSF/1" comment is about? Anybody have an Alpha OSF/1 hanging around. The problem is that when sizeof(pthread_t) != sizeof(long) this line is just broken.

Could this be changed to return threadid; safely?

Thanks, Trent

-- Trent Mick TrentM@ActiveState.com