defined a function CmiThreadIs() which tells which thread package is using.
authorGengbin Zheng <gzheng@illinois.edu>
Fri, 13 Jan 2006 05:07:09 +0000 (05:07 +0000)
committerGengbin Zheng <gzheng@illinois.edu>
Fri, 13 Jan 2006 05:07:09 +0000 (05:07 +0000)
src/conv-core/converse.h
src/conv-core/threads.c

index 1d8814386452821dcdb44b7b5837af611f96a594..7df569f69992b70083236dfbbd71212071b5370d 100644 (file)
@@ -531,6 +531,15 @@ CMK_TYPEDEF_UINT8 CmiMemoryUsage();
 #define CMI_MEMORY_IS_PARANOID (1<<2)
 int CmiMemoryIs(int flag); /* return state of this flag */
 
+#define CMI_THREAD_IS_QT         (1<<1)
+#define CMI_THREAD_IS_CONTEXT    (1<<2)
+#define CMI_THREAD_IS_UJCONTEXT  (1<<3)
+#define CMI_THREAD_IS_PTHREADS   (1<<4)
+#define CMI_THREAD_IS_FIBERS     (1<<5)
+#define CMI_THREAD_IS_QT_ALIAS   (1<<6)
+#define CMI_THREAD_IS_STACKCOPY  (1<<7)
+int CmiThreadIs(int flag); /* return state of this flag */
+
 void CmiMkdir(const char *dirName);
 
 double   CmiCpuTimer(void);
index 66a087074ee11e706862a1c5da4ffac64c8165e5..f9040772722183550db251e51841778a51f9f588 100644 (file)
@@ -170,6 +170,14 @@ typedef struct CthThreadBase
   struct CthThreadListener *listener; /* pointer to the first of the listeners */
 } CthThreadBase;
 
+/* By default, there are no flags */
+static int CmiThreadIs_flag=0;
+
+int CmiThreadIs(int flag)
+{
+       return (CmiThreadIs_flag&flag)==flag;
+}
+
 /*Macros to convert between base and specific thread types*/
 #define B(t) ((CthThreadBase *)(t))
 #define S(t) ((CthThread)(t))
@@ -768,6 +776,8 @@ void CthInit(char **argv)
   sp = QT_SP(switchbuf, SWITCHBUF_SIZE);
   sp = QT_ARGS(sp,0,0,0,(qt_only_t*)CthDummy);
   p->switchbuf_sp = sp;
+
+  CmiThreadIs_flag |= CMI_THREAD_IS_STACKCOPY;
 }
 
 static void CthOnly(CthThread t, void *dum1, void *dum2)
@@ -934,6 +944,7 @@ void CthInit(char **argv)
   t->fiber = ConvertThreadToFiber(t);
   _MEMCHECK(t->fiber);
 
+  CmiThreadIs_flag |= CMI_THREAD_IS_FIBERS;
 }
 
 void CthThreadFree(CthThread old)
@@ -1114,6 +1125,8 @@ void CthInit(char **argv)
   CthCpvAccess(CthCurrent)=t;
   CthThreadInit(t);
   t->self = pthread_self();
+
+  CmiThreadIs_flag |= CMI_THREAD_IS_PTHREADS;
 }
 
 void CthFree(t)
@@ -1284,6 +1297,11 @@ void CthInit(char **argv)
   if (CthCpvAccess(_defaultStackSize) < MINSIGSTKSZ) 
     CthCpvAccess(_defaultStackSize) = MINSIGSTKSZ;
 #endif
+#if CMK_THREADS_USE_CONTEXT
+  CmiThreadIs_flag |= CMI_THREAD_IS_CONTEXT;
+#else
+  CmiThreadIs_flag |= CMI_THREAD_IS_UJCONTEXT;
+#endif
 }
 
 static void CthThreadFree(CthThread t)
@@ -1499,6 +1517,12 @@ void CthInit(char **argv)
   mainThread=CthThreadInit();
   CthCpvAccess(CthCurrent)=mainThread;
   /* mainThread->base.suspendable=0;*/ /*Can't suspend main thread (trashes Quickthreads jump buffer)*/
+
+#if CMK_THREADS_ALIAS_STACK
+  CmiThreadIs_flag |= CMI_THREAD_IS_QT_ALIAS;
+#else
+  CmiThreadIs_flag |= CMI_THREAD_IS_QT;
+#endif
 }
 
 void CthFree(CthThread t)