2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-30 22:05:19 +00:00

timeval: Fix occasional backtrace() related deadlock.

Occasionally, backtrace() will deadlock in the signal handler
because it does some non signal safe initialization.  Specifically,
it opens a shared object.  As a work around, this patch forces
backtrace() to run outside of a signal handler, so that future
calls will perform as expected.

Signed-off-by: Ethan Jackson <ethan@nicira.com>
This commit is contained in:
Ethan Jackson
2012-10-26 12:33:01 -07:00
parent 49770faf0d
commit 543a550837

View File

@@ -121,6 +121,16 @@ time_init(void)
}
inited = true;
/* The implementation of backtrace() in glibc does some one time
* initialization which is not signal safe. This can cause deadlocks if
* run from the signal handler. As a workaround, force the initialization
* to happen here. */
if (HAVE_EXECINFO_H) {
void *bt[1];
backtrace(bt, ARRAY_SIZE(bt));
}
memset(traces, 0, sizeof traces);
if (HAVE_EXECINFO_H && CACHE_TIME) {