Looks Good.
On Thu, Mar 31, 2011 at 4:31 PM, Ben Pfaff <[email protected]> wrote: > It seems possible that a signal coming in at the wrong time could confuse > this code. It's always best to loop on EINTR. > --- > lib/daemon.c | 3 ++- > python/ovs/daemon.py | 13 +++++++++---- > 2 files changed, 11 insertions(+), 5 deletions(-) > > diff --git a/lib/daemon.c b/lib/daemon.c > index 64e2f9e..173dabe 100644 > --- a/lib/daemon.c > +++ b/lib/daemon.c > @@ -244,11 +244,12 @@ fork_and_wait_for_startup(int *fdp) > pid = fork(); > if (pid > 0) { > /* Running in parent process. */ > + size_t bytes_read; > char c; > > close(fds[1]); > fatal_signal_fork(); > - if (read(fds[0], &c, 1) != 1) { > + if (read_fully(fds[0], &c, 1, &bytes_read) != 0) { > int retval; > int status; > > diff --git a/python/ovs/daemon.py b/python/ovs/daemon.py > index 4e54e69..4df2371 100644 > --- a/python/ovs/daemon.py > +++ b/python/ovs/daemon.py > @@ -213,10 +213,15 @@ def _fork_and_wait_for_startup(): > # Running in parent process. > os.close(wfd) > ovs.fatal_signal.fork() > - try: > - s = os.read(rfd, 1) > - except OSError, e: > - s = "" > + while True: > + try: > + s = os.read(rfd, 1) > + error = 0 > + except OSError, e: > + s = "" > + error = e.errno > + if error != errno.EINTR: > + break > if len(s) != 1: > retval, status = _waitpid(pid, 0) > if (retval == pid and > -- > 1.7.1 > > _______________________________________________ > dev mailing list > [email protected] > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
