Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r84336:57e12f1aa41b
Date: 2016-05-09 14:04 +0200
http://bitbucket.org/pypy/pypy/changeset/57e12f1aa41b/

Log:    Blind fix for issue #2285: rare vmprof segfaults on OS/X

diff --git a/rpython/rlib/rvmprof/src/vmprof_common.h 
b/rpython/rlib/rvmprof/src/vmprof_common.h
--- a/rpython/rlib/rvmprof/src/vmprof_common.h
+++ b/rpython/rlib/rvmprof/src/vmprof_common.h
@@ -82,6 +82,10 @@
     int n = 0;
     intptr_t addr = 0;
     int bottom_jitted = 0;
+
+    if (stack == NULL)
+        return 0;
+
     // check if the pc is in JIT
 #ifdef PYPY_JIT_CODEMAP
     if (pypy_find_codemap_at_addr((intptr_t)pc, &addr)) {
@@ -111,7 +115,12 @@
 #ifndef RPYTHON_LL2CTYPES
 static vmprof_stack_t *get_vmprof_stack(void)
 {
-    return RPY_THREADLOCALREF_GET(vmprof_tl_stack);
+    struct pypy_threadlocal_s *tl;
+    _OP_THREADLOCALREF_ADDR_SIGHANDLER(tl);
+    if (tl == NULL)
+        return NULL;
+    else
+        return tl->vmprof_tl_stack;
 }
 #else
 static vmprof_stack_t *get_vmprof_stack(void)
diff --git a/rpython/translator/c/src/threadlocal.h 
b/rpython/translator/c/src/threadlocal.h
--- a/rpython/translator/c/src/threadlocal.h
+++ b/rpython/translator/c/src/threadlocal.h
@@ -53,6 +53,13 @@
             r = _RPython_ThreadLocals_Build();  \
     } while (0)
 
+#define _OP_THREADLOCALREF_ADDR_SIGHANDLER(r)   \
+    do {                                        \
+        r = (char *)&pypy_threadlocal;          \
+        if (pypy_threadlocal.ready != 42)       \
+            r = NULL;                           \
+    } while (0)
+
 #define RPY_THREADLOCALREF_ENSURE()             \
     if (pypy_threadlocal.ready != 42)           \
         (void)_RPython_ThreadLocals_Build();
@@ -87,6 +94,11 @@
             r = _RPython_ThreadLocals_Build();  \
     } while (0)
 
+#define _OP_THREADLOCALREF_ADDR_SIGHANDLER(r)   \
+    do {                                        \
+        r = (char *)_RPy_ThreadLocals_Get();    \
+    } while (0)
+
 #define RPY_THREADLOCALREF_ENSURE()             \
     if (!_RPy_ThreadLocals_Get())               \
         (void)_RPython_ThreadLocals_Build();
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to