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

Reply via email to