The POSIX standard outlines that pthread_t is an opaque data type and no
assumption should be made about it. However, we observed that libraries and
applications assume frequently that pthread_t is a pointer or other numerical
data type and use it to identify the corresponding threads.
pthread-embedded makes the strange decision to define pthread_t as
structure, a decision that, although compliant with POSIX standards,
makes the porting process a bit challenging. Therefore we introduce a
conversion function which simply returns the first encapsulated
unsigned long value in the structure which actually points to the
underlying thread object.
Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
Reviewed-by: Felipe Huici <felipe.huici@neclab.eu>
/* The C code in pthread.h is not guarded for C++ */
#include_next <pthread.h>
+static inline unsigned long
+pthread_to_unsigned_long(pthread_t *t)
+{
+ unsigned long *_t;
+
+ _t = (unsigned long *) t;
+ return *_t;
+}
+
int pthread_atfork(void (*prepare)(void),
void (*parent)(void), void (*child)(void));