Thank you. I will push this soon.
On Mon, Nov 28, 2011 at 11:18:23AM -0800, Ethan Jackson wrote: > Looks good. > > Ethan > > On Wed, Nov 23, 2011 at 12:15, Ben Pfaff <b...@nicira.com> wrote: > > On one machine, "/etc/init.d/openvswitch-switch start" failed to start > > with: > > > > ? ovs-vswitchd: fork child failed to signal startup (Success) > > ? Starting ovs-vswitchd ... failed! > > > > "strace" revealed that the fork child was actually segfaulting, but the > > message output didn't indicate that in any way. ?This commit fixes the > > log message (but not the segfault itself). > > > > Reported-by: Michael Hu <m...@nicira.com> > > Bug #8457. > > --- > > ?lib/daemon.c ? ? ? ? | ? 23 ++++++++++++++--------- > > ?python/ovs/daemon.py | ? 18 ++++++++++++------ > > ?2 files changed, 26 insertions(+), 15 deletions(-) > > > > diff --git a/lib/daemon.c b/lib/daemon.c > > index ef1a24e..3dd5a1a 100644 > > --- a/lib/daemon.c > > +++ b/lib/daemon.c > > @@ -250,16 +250,21 @@ fork_and_wait_for_startup(int *fdp) > > ? ? ? ? ? ? ? ? retval = waitpid(pid, &status, 0); > > ? ? ? ? ? ? } while (retval == -1 && errno == EINTR); > > > > - ? ? ? ? ? ?if (retval == pid > > - ? ? ? ? ? ? ? ?&& WIFEXITED(status) > > - ? ? ? ? ? ? ? ?&& WEXITSTATUS(status)) { > > - ? ? ? ? ? ? ? ?/* Child exited with an error. ?Convey the same error to > > - ? ? ? ? ? ? ? ? * our parent process as a courtesy. */ > > - ? ? ? ? ? ? ? ?exit(WEXITSTATUS(status)); > > + ? ? ? ? ? ?if (retval == pid) { > > + ? ? ? ? ? ? ? ?if (WIFEXITED(status) && WEXITSTATUS(status)) { > > + ? ? ? ? ? ? ? ? ? ?/* Child exited with an error. ?Convey the same error > > + ? ? ? ? ? ? ? ? ? ? * to our parent process as a courtesy. */ > > + ? ? ? ? ? ? ? ? ? ?exit(WEXITSTATUS(status)); > > + ? ? ? ? ? ? ? ?} else { > > + ? ? ? ? ? ? ? ? ? ?char *status_msg = process_status_msg(status); > > + ? ? ? ? ? ? ? ? ? ?VLOG_FATAL("fork child died before signaling startup > > (%s)", > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? status_msg); > > + ? ? ? ? ? ? ? ?} > > + ? ? ? ? ? ?} else if (retval < 0) { > > + ? ? ? ? ? ? ? ?VLOG_FATAL("waitpid failed (%s)", strerror(errno)); > > + ? ? ? ? ? ?} else { > > + ? ? ? ? ? ? ? ?NOT_REACHED(); > > ? ? ? ? ? ? } > > - > > - ? ? ? ? ? ?VLOG_FATAL("fork child failed to signal startup (%s)", > > - ? ? ? ? ? ? ? ? ? ? ? strerror(errno)); > > ? ? ? ? } > > ? ? ? ? close(fds[0]); > > ? ? ? ? *fdp = -1; > > diff --git a/python/ovs/daemon.py b/python/ovs/daemon.py > > index 5937877..0d119f2 100644 > > --- a/python/ovs/daemon.py > > +++ b/python/ovs/daemon.py > > @@ -245,13 +245,19 @@ def _fork_and_wait_for_startup(): > > ? ? ? ? ? ? ? ? break > > ? ? ? ? if len(s) != 1: > > ? ? ? ? ? ? retval, status = _waitpid(pid, 0) > > - ? ? ? ? ? ?if (retval == pid and > > - ? ? ? ? ? ? ? ?os.WIFEXITED(status) and os.WEXITSTATUS(status)): > > - ? ? ? ? ? ? ? ?# Child exited with an error. ?Convey the same error to > > - ? ? ? ? ? ? ? ?# our parent process as a courtesy. > > - ? ? ? ? ? ? ? ?sys.exit(os.WEXITSTATUS(status)) > > + ? ? ? ? ? ?if retval == pid: > > + ? ? ? ? ? ? ? ?if os.WIFEXITED(status) and os.WEXITSTATUS(status): > > + ? ? ? ? ? ? ? ? ? ?# Child exited with an error. ?Convey the same error to > > + ? ? ? ? ? ? ? ? ? ?# our parent process as a courtesy. > > + ? ? ? ? ? ? ? ? ? ?sys.exit(os.WEXITSTATUS(status)) > > + ? ? ? ? ? ? ? ?else: > > + ? ? ? ? ? ? ? ? ? ?sys.stderr.write("fork child failed to signal " > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "startup (%s)\n" > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? % ovs.process.status_msg(status)) > > ? ? ? ? ? ? else: > > - ? ? ? ? ? ? ? ?sys.stderr.write("fork child failed to signal startup\n") > > + ? ? ? ? ? ? ? ?assert retval < 0 > > + ? ? ? ? ? ? ? ?sys.stderr.write("waitpid failed (%s)\n" > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? % os.strerror(-retval)) > > ? ? ? ? ? ? ? ? sys.exit(1) > > > > ? ? ? ? os.close(rfd) > > -- > > 1.7.4.4 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev