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 OFTLSKey;
32 #elif defined(OF_WINDOWS)
34 typedef DWORD OFTLSKey;
35 #elif defined(OF_MORPHOS)
36 # include <proto/exec.h>
37 typedef ULONG OFTLSKey;
38 #elif defined(OF_AMIGAOS)
39 typedef struct _OFTLSKey {
40 struct objc_hashtable *table;
41 struct _OFTLSKey *next, *previous;
48 extern int OFTLSKeyNew(OFTLSKey *key);
49 extern int OFTLSKeyFree(OFTLSKey key);
56 #if defined(OF_HAVE_PTHREADS)
57 static OF_INLINE
void *
58 OFTLSKeyGet(OFTLSKey key)
60 return pthread_getspecific(key);
64 OFTLSKeySet(OFTLSKey key,
void *ptr)
66 return pthread_setspecific(key, ptr);
68 #elif defined(OF_WINDOWS)
69 static OF_INLINE
void *
70 OFTLSKeyGet(OFTLSKey key)
72 return TlsGetValue(key);
76 OFTLSKeySet(OFTLSKey key,
void *ptr)
78 return (TlsSetValue(key, ptr) ? 0 : EINVAL);
80 #elif defined(OF_MORPHOS)
81 static OF_INLINE
void *
82 OFTLSKeyGet(OFTLSKey key)
84 return (
void *)TLSGetValue(key);
88 OFTLSKeySet(OFTLSKey key,
void *ptr)
90 return (TLSSetValue(key, (APTR)ptr) ? 0 : EINVAL);
92 #elif defined(OF_AMIGAOS)
97 extern void *OFTLSKeyGet(OFTLSKey key);
98 extern int OFTLSKeySet(OFTLSKey key,
void *ptr);