plugins/bcli: fix leak report when bitcoind goes away.

I shut down bitcoind during a test, and bcli leak reports flooded in.
They're all temporary, but this fixes them.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2023-07-22 13:56:36 +09:30
parent 5190a21d3d
commit 7ddebada90

View file

@ -179,9 +179,9 @@ static char *args_string(const tal_t *ctx, const char **args)
return ret;
}
static char *bcli_args(struct bitcoin_cli *bcli)
static char *bcli_args(const tal_t *ctx, struct bitcoin_cli *bcli)
{
return args_string(bcli, bcli->args);
return args_string(ctx, bcli->args);
}
/* Only set as destructor once bcli is in current. */
@ -216,7 +216,7 @@ static void bcli_failure(struct bitcoin_cli *bcli,
"we have been retrying command for "
"--bitcoin-retry-timeout=%"PRIu64" seconds; "
"bitcoind setup or our --bitcoin-* configs broken?",
bcli_args(bcli),
bcli_args(tmpctx, bcli),
exitstatus,
bitcoind->error_count,
(int)bcli->output_bytes,
@ -224,7 +224,7 @@ static void bcli_failure(struct bitcoin_cli *bcli,
bitcoind->retry_timeout);
plugin_log(bcli->cmd->plugin, LOG_UNUSUAL, "%s exited with status %u",
bcli_args(bcli), exitstatus);
bcli_args(tmpctx, bcli), exitstatus);
bitcoind->error_count++;
/* Retry in 1 second */
@ -242,19 +242,19 @@ static void bcli_finished(struct io_conn *conn UNUSED, struct bitcoin_cli *bcli)
if (msec > 10000)
plugin_log(bcli->cmd->plugin, LOG_UNUSUAL,
"bitcoin-cli: finished %s (%"PRIu64" ms)",
bcli_args(bcli), msec);
bcli_args(tmpctx, bcli), msec);
assert(bitcoind->num_requests[prio] > 0);
/* FIXME: If we waited for SIGCHILD, this could never hang! */
while ((ret = waitpid(bcli->pid, &status, 0)) < 0 && errno == EINTR);
if (ret != bcli->pid)
plugin_err(bcli->cmd->plugin, "%s %s", bcli_args(bcli),
plugin_err(bcli->cmd->plugin, "%s %s", bcli_args(tmpctx, bcli),
ret == 0 ? "not exited?" : strerror(errno));
if (!WIFEXITED(status))
plugin_err(bcli->cmd->plugin, "%s died with signal %i",
bcli_args(bcli),
bcli_args(tmpctx, bcli),
WTERMSIG(status));
/* Implicit nonzero_exit_ok == false */
@ -380,7 +380,7 @@ static struct command_result *command_err_bcli_badjson(struct bitcoin_cli *bcli,
const char *errmsg)
{
char *err = tal_fmt(bcli, "%s: bad JSON: %s (%.*s)",
bcli_args(bcli), errmsg,
bcli_args(tmpctx, bcli), errmsg,
(int)bcli->output_bytes, bcli->output);
return command_done_err(bcli->cmd, BCLI_ERROR, err, NULL);
}
@ -537,7 +537,7 @@ static struct command_result *process_sendrawtransaction(struct bitcoin_cli *bcl
if (bcli->exitstatus)
plugin_log(bcli->cmd->plugin, LOG_DBG,
"sendrawtx exit %i (%s) %.*s",
*bcli->exitstatus, bcli_args(bcli),
*bcli->exitstatus, bcli_args(tmpctx, bcli),
*bcli->exitstatus ?
(u32)bcli->output_bytes-1 : 0,
bcli->output);