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