Skip to content

Commit

Permalink
Support debugging with lldb
Browse files Browse the repository at this point in the history
Running with lldb cause SIGINT, which makes waitpid() returns
error with errno as EINTR. This patch retry waitpid() to ignore
EINTR errors.
  • Loading branch information
conanoc authored and cdecker committed Apr 15, 2018
1 parent a6c76f9 commit b2f7e9a
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions lightningd/bitcoind.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down Expand Up @@ -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;
Expand All @@ -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))
Expand Down

0 comments on commit b2f7e9a

Please sign in to comment.