X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=lib%2Ftimeval.c;h=d8539892afa57145f6d90d84056f1eb0dc86c010;hb=e1cfc4e4612594746483dbe82607b1ba339b5b6c;hp=05f1c2d3643030dc16c20bdcacb44cc0f72311ac;hpb=f43e80e023378a2c1ef18d3caee9b76d6d2a6d23;p=sliver-openvswitch.git diff --git a/lib/timeval.c b/lib/timeval.c index 05f1c2d36..d8539892a 100644 --- a/lib/timeval.c +++ b/lib/timeval.c @@ -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) {