]> xenbits.xensource.com Git - unikraft/libs/pthread-embedded.git/commitdiff
pthread.h: Convert pthread_t to unsigned long
authorCostin Lupu <costin.lupu@cs.pub.ro>
Sun, 13 Oct 2019 13:16:55 +0000 (16:16 +0300)
committerFelipe Huici <felipe.huici@neclab.eu>
Mon, 14 Oct 2019 12:20:36 +0000 (14:20 +0200)
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>
include/pthread.h

index c1ebcea2426e23542c3ec6014d499ad4a37649b6..a71fe34957f1bdca8a08c0877405d97738fe0118 100644 (file)
@@ -29,6 +29,15 @@ extern "C" {
 /* 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));