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