Thanks, pushed to master and branch-1.10.
On Thu, Mar 07, 2013 at 05:09:34PM -0800, Ethan Jackson wrote: > Acked-by: Ethan Jackson <et...@nicira.com> > > > > On Thu, Mar 7, 2013 at 5:07 PM, Ben Pfaff <b...@nicira.com> wrote: > > > backtrace() is really useful, but it is not signal safe everywhere. We > > need to reassess whether it is reasonable to use it anywhere, but > > immediately we need to disable it on x86-64 (with glibc) because it is > > causing segfaults in testing. > > > > Bug #15497. > > Reported-by: Ram Jothikumar <rjothiku...@vmware.com> > > Signed-off-by: Ben Pfaff <b...@nicira.com> > > --- > > lib/timeval.c | 28 ++++++++++++++++------------ > > 1 files changed, 16 insertions(+), 12 deletions(-) > > > > diff --git a/lib/timeval.c b/lib/timeval.c > > index 2f00355..6e41514 100644 > > --- a/lib/timeval.c > > +++ b/lib/timeval.c > > @@ -17,9 +17,6 @@ > > #include <config.h> > > #include "timeval.h" > > #include <errno.h> > > -#if HAVE_EXECINFO_H > > -#include <execinfo.h> > > -#endif > > #include <poll.h> > > #include <signal.h> > > #include <stdlib.h> > > @@ -38,6 +35,15 @@ > > #include "util.h" > > #include "vlog.h" > > > > +/* backtrace() from <execinfo.h> is really useful, but it is not signal > > safe > > + * everywhere, such as on x86-64. */ > > +#if HAVE_EXECINFO_H && !defined __x86_64__ > > +# define USE_BACKTRACE 1 > > +# include <execinfo.h> > > +#else > > +# define USE_BACKTRACE 0 > > +#endif > > + > > VLOG_DEFINE_THIS_MODULE(timeval); > > > > /* The clock to use for measuring time intervals. This is > > CLOCK_MONOTONIC by > > @@ -93,9 +99,7 @@ static void timespec_add(struct timespec *sum, > > const struct timespec *a, const struct timespec > > *b); > > static unixctl_cb_func backtrace_cb; > > > > -#ifndef HAVE_EXECINFO_H > > -#define HAVE_EXECINFO_H 0 > > - > > +#if !USE_BACKTRACE > > static int > > backtrace(void **buffer OVS_UNUSED, int size OVS_UNUSED) > > { > > @@ -107,7 +111,7 @@ backtrace_symbols(void *const *buffer OVS_UNUSED, int > > size OVS_UNUSED) > > { > > NOT_REACHED(); > > } > > -#endif > > +#endif /* !USE_BACKTRACE */ > > > > /* Initializes the timetracking module, if not already initialized. */ > > static void > > @@ -124,7 +128,7 @@ time_init(void) > > * 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) { > > + if (USE_BACKTRACE) { > > void *bt[1]; > > > > backtrace(bt, ARRAY_SIZE(bt)); > > @@ -132,7 +136,7 @@ time_init(void) > > > > memset(traces, 0, sizeof traces); > > > > - if (HAVE_EXECINFO_H && CACHE_TIME) { > > + if (USE_BACKTRACE && CACHE_TIME) { > > unixctl_command_register("backtrace", "", 0, 0, backtrace_cb, > > NULL); > > } > > > > @@ -419,7 +423,7 @@ sigalrm_handler(int sig_nr OVS_UNUSED) > > wall_tick = true; > > monotonic_tick = true; > > > > - if (HAVE_EXECINFO_H && CACHE_TIME) { > > + if (USE_BACKTRACE && CACHE_TIME) { > > struct trace *trace = &traces[trace_head]; > > > > trace->n_frames = backtrace(trace->backtrace, > > @@ -633,7 +637,7 @@ format_backtraces(struct ds *ds, size_t min_count) > > { > > time_init(); > > > > - if (HAVE_EXECINFO_H && CACHE_TIME) { > > + if (USE_BACKTRACE && CACHE_TIME) { > > struct hmap trace_map = HMAP_INITIALIZER(&trace_map); > > struct trace *trace, *next; > > sigset_t oldsigs; > > @@ -730,7 +734,7 @@ backtrace_cb(struct unixctl_conn *conn, > > { > > struct ds ds = DS_EMPTY_INITIALIZER; > > > > - ovs_assert(HAVE_EXECINFO_H && CACHE_TIME); > > + ovs_assert(USE_BACKTRACE && CACHE_TIME); > > format_backtraces(&ds, 0); > > unixctl_command_reply(conn, ds_cstr(&ds)); > > ds_destroy(&ds); > > -- > > 1.7.2.5 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev