generic64 did not work with SMP due to using a global pointer mapping table.
authorGengbin Zheng <gzheng@illinois.edu>
Tue, 22 Feb 2011 21:51:27 +0000 (15:51 -0600)
committerGengbin Zheng <gzheng@illinois.edu>
Tue, 22 Feb 2011 21:51:27 +0000 (15:51 -0600)
updated this code by using __thread (when supported) to work with SMP.

src/QuickThreads/md/setjmp64.c
src/QuickThreads/md/setjmp64_.c

index 694377f0915994bae0c536c24a3b59383def052c..3462f44e27d7f7ffffe7c2c194ffba414bc67bb2 100644 (file)
@@ -12,6 +12,8 @@
 #include <alloca.h>
 #endif
 
+#include "conv-config.h"
+
 struct helpdesc { qt_helper_t *hfn; qt_t *jb; void *old; void *new; };
 
 #ifdef __CYGWIN__
@@ -29,8 +31,15 @@ struct helpdesc { qt_helper_t *hfn; qt_t *jb; void *old; void *new; };
 #endif
 
 #define MAXTABLE 1000
+
+#if CMK_SMP && CMK_TLS_THREAD
+static __thread void * pbuf[MAXTABLE] = {0};
+static __thread int    pcounter = 1;
+#else
 static void * pbuf[MAXTABLE] = {0};
 static int    pcounter = 1;
+#endif
+
 
 static int push_buf(void *ptr)
 {
index f1dc3f2f68cef6d5e9875a2a3ca61d969547eaab..b04f738debc01fa991f655a154f383e190e5ad34 100644 (file)
@@ -19,6 +19,8 @@ versions of charm.
 #include <alloca.h>
 #endif
 
+#include "conv-config.h"
+
 struct helpdesc { qt_helper_t *hfn; qt_t *jb; void *old; void *new; };
 
 #ifdef __CYGWIN__
@@ -36,8 +38,14 @@ struct helpdesc { qt_helper_t *hfn; qt_t *jb; void *old; void *new; };
 #endif
 
 #define MAXTABLE 1000
+
+#if CMK_SMP && CMK_TLS_THREAD
+static __thread void * pbuf[MAXTABLE] = {0};
+static __thread int    pcounter = 1;
+#else
 static void * pbuf[MAXTABLE] = {0};
 static int    pcounter = 1;
+#endif
 
 static int push_buf(void *ptr)
 {