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:
@@ -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) {
|
||||
|
Reference in New Issue
Block a user