From b2f7e9af4a8c5724a279d0821cf5dd21a89ce388 Mon Sep 17 00:00:00 2001 From: conanoc Date: Thu, 5 Apr 2018 16:53:12 +0900 Subject: [PATCH] Support debugging with lldb Running with lldb cause SIGINT, which makes waitpid() returns error with errno as EINTR. This patch retry waitpid() to ignore EINTR errors. --- lightningd/bitcoind.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lightningd/bitcoind.c b/lightningd/bitcoind.c index 9aaa8984e..2f8392709 100644 --- a/lightningd/bitcoind.c +++ b/lightningd/bitcoind.c @@ -157,7 +157,7 @@ static void bcli_finished(struct io_conn *conn UNUSED, struct bitcoin_cli *bcli) bool ok; /* FIXME: If we waited for SIGCHILD, this could never hang! */ - ret = waitpid(bcli->pid, &status, 0); + while ((ret = waitpid(bcli->pid, &status, 0)) < 0 && errno == EINTR); if (ret != bcli->pid) fatal("%s %s", bcli_args(bcli), ret == 0 ? "not exited?" : strerror(errno)); @@ -740,7 +740,7 @@ static void fatal_bitcoind_failure(struct bitcoind *bitcoind, const char *error_ void wait_for_bitcoind(struct bitcoind *bitcoind) { - int from, status; + int from, status, ret; pid_t child; const char **cmd = cmdarr(bitcoind, bitcoind, "echo", NULL); bool printed = false; @@ -759,7 +759,7 @@ void wait_for_bitcoind(struct bitcoind *bitcoind) fatal("Reading from %s failed: %s", cmd[0], strerror(errno)); - int ret = waitpid(child, &status, 0); + while ((ret = waitpid(child, &status, 0)) < 0 && errno == EINTR); if (ret != child) fatal("Waiting for %s: %s", cmd[0], strerror(errno)); if (!WIFEXITED(status))