Quickier thread-specific data on OS/2
Ilya Zakharevich [Mon, 3 May 1999 22:38:50 +0000 (18:38 -0400)]
Message-Id: <199905040238.WAA01865@monk.mps.ohio-state.edu>

p4raw-id: //depot/perl@3369

os2/os2ish.h
os2/os2thread.h

index 97b489b..cfd13c8 100644 (file)
@@ -148,10 +148,17 @@ extern int rc;
 #define dTHR struct thread *thr = THR
 */
 
-#define pthread_getspecific(k)         (*_threadstore())
-#define pthread_setspecific(k,v)       (*_threadstore()=v,0)
+#ifdef USE_SLOW_THREAD_SPECIFIC
+#  define pthread_getspecific(k)       (*_threadstore())
+#  define pthread_setspecific(k,v)     (*_threadstore()=v,0)
+#  define pthread_key_create(keyp,flag)        (*keyp=_gettid(),0)
+#else
+#  define pthread_getspecific(k)       (*(k))
+#  define pthread_setspecific(k,v)     (*(k)=(v),0)
+#  define pthread_key_create(keyp,flag)        (DosAllocThreadLocalMemory(1,(U32*)keyp) ? croak("LocalMemory"),1 : 0)
+#endif
+#define pthread_key_delete(keyp)
 #define pthread_self()                 _gettid()
-#define pthread_key_create(keyp,flag)  (*keyp=_gettid(),0)
 #define YIELD                          DosSleep(0)
 
 #ifdef PTHREADS_INCLUDED               /* For ./x2p stuff. */
index d56fe16..9516ddd 100644 (file)
@@ -8,7 +8,11 @@ typedef _rmutex perl_mutex;
 /*typedef HEV perl_cond;*/     /* Will include os2.h into all C files.  */
 typedef unsigned long perl_cond;
 
+#ifdef USE_SLOW_THREAD_SPECIFIC
 typedef int perl_key;
+#else
+typedef void** perl_key;
+#endif
 
 typedef unsigned long pthread_attr_t;
 #define PTHREADS_INCLUDED