summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/daemon.c3
-rw-r--r--python/ovs/daemon.py13
2 files changed, 11 insertions, 5 deletions
diff --git a/lib/daemon.c b/lib/daemon.c
index 64e2f9e9a..173dabe6f 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 4e54e697f..4df237159 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