16 #include "objfw-defs.h"
22 #if !defined(OF_HAVE_THREADS) || \
23 (!defined(OF_HAVE_PTHREADS) && !defined(OF_WINDOWS) && !defined(OF_AMIGAOS))
24 # error No thread-local storage available!
29 #if defined(OF_HAVE_PTHREADS)
31 typedef pthread_key_t of_tlskey_t;
32 #elif defined(OF_WINDOWS)
34 typedef DWORD of_tlskey_t;
35 #elif defined(OF_MORPHOS)
36 # include <proto/exec.h>
37 typedef ULONG of_tlskey_t;
38 #elif defined(OF_AMIGAOS)
39 typedef struct of_tlskey {
40 struct objc_hashtable *table;
41 struct of_tlskey *next, *previous;
48 extern int of_tlskey_new(of_tlskey_t *key);
49 extern int of_tlskey_free(of_tlskey_t key);
56 #if defined(OF_HAVE_PTHREADS)
57 static OF_INLINE
void *
58 of_tlskey_get(of_tlskey_t key)
60 return pthread_getspecific(key);
64 of_tlskey_set(of_tlskey_t key,
void *ptr)
66 return pthread_setspecific(key, ptr);
68 #elif defined(OF_WINDOWS)
69 static OF_INLINE
void *
70 of_tlskey_get(of_tlskey_t key)
72 return TlsGetValue(key);
76 of_tlskey_set(of_tlskey_t key,
void *ptr)
78 return (TlsSetValue(key, ptr) ? 0 : EINVAL);
80 #elif defined(OF_MORPHOS)
81 static OF_INLINE
void *
82 of_tlskey_get(of_tlskey_t key)
84 return (
void *)TLSGetValue(key);
88 of_tlskey_set(of_tlskey_t key,
void *ptr)
90 return (TLSSetValue(key, (APTR)ptr) ? 0 : EINVAL);
92 #elif defined(OF_AMIGAOS)
97 extern void *of_tlskey_get(of_tlskey_t key);
98 extern int of_tlskey_set(of_tlskey_t key,
void *ptr);