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