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);