20 #include "objfw-defs.h" 26 #if !defined(OF_HAVE_THREADS) || \ 27 (!defined(OF_HAVE_PTHREADS) && !defined(OF_WINDOWS) && !defined(OF_AMIGAOS)) 28 # error No thread-local storage available! 33 #if defined(OF_HAVE_PTHREADS) 35 typedef pthread_key_t OFTLSKey;
36 #elif defined(OF_WINDOWS) 38 typedef DWORD OFTLSKey;
39 #elif defined(OF_MORPHOS) 40 # include <proto/exec.h> 41 typedef ULONG OFTLSKey;
42 #elif defined(OF_AMIGAOS) 43 typedef struct _OFTLSKey {
44 struct objc_hashtable *table;
45 struct _OFTLSKey *next, *previous;
52 extern int OFTLSKeyNew(OFTLSKey *key);
53 extern int OFTLSKeyFree(OFTLSKey key);
60 #if defined(OF_HAVE_PTHREADS) 61 static OF_INLINE
void *
62 OFTLSKeyGet(OFTLSKey key)
64 return pthread_getspecific(key);
68 OFTLSKeySet(OFTLSKey key,
void *ptr)
70 return pthread_setspecific(key, ptr);
72 #elif defined(OF_WINDOWS) 73 static OF_INLINE
void *
74 OFTLSKeyGet(OFTLSKey key)
76 return TlsGetValue(key);
80 OFTLSKeySet(OFTLSKey key,
void *ptr)
82 return (TlsSetValue(key, ptr) ? 0 : EINVAL);
84 #elif defined(OF_MORPHOS) 85 static OF_INLINE
void *
86 OFTLSKeyGet(OFTLSKey key)
88 return (
void *)TLSGetValue(key);
92 OFTLSKeySet(OFTLSKey key,
void *ptr)
94 return (TLSSetValue(key, (APTR)ptr) ? 0 : EINVAL);
96 #elif defined(OF_AMIGAOS) 101 extern void *OFTLSKeyGet(OFTLSKey key);
102 extern int OFTLSKeySet(OFTLSKey key,
void *ptr);