Browse Source

daemon_conn: fix memory leak when passing an fd.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ppa-0.6.1
Rusty Russell 6 years ago
committed by Christian Decker
parent
commit
90d1062a55
  1. 5
      common/daemon_conn.c

5
common/daemon_conn.c

@ -22,9 +22,11 @@ again:
msg = msg_dequeue(&dc->out); msg = msg_dequeue(&dc->out);
if (msg) { if (msg) {
int fd = msg_extract_fd(msg); int fd = msg_extract_fd(msg);
if (fd >= 0) if (fd >= 0) {
tal_free(msg);
return io_send_fd(conn, fd, true, return io_send_fd(conn, fd, true,
daemon_conn_write_next, dc); daemon_conn_write_next, dc);
}
return io_write_wire(conn, take(msg), daemon_conn_write_next, return io_write_wire(conn, take(msg), daemon_conn_write_next,
dc); dc);
} else if (dc->msg_queue_cleared_cb) { } else if (dc->msg_queue_cleared_cb) {
@ -52,6 +54,7 @@ bool daemon_conn_sync_flush(struct daemon_conn *dc)
while ((msg = msg_dequeue(&dc->out)) != NULL) { while ((msg = msg_dequeue(&dc->out)) != NULL) {
int fd = msg_extract_fd(msg); int fd = msg_extract_fd(msg);
if (fd >= 0) { if (fd >= 0) {
tal_free(msg);
if (!fdpass_send(daemon_fd, fd)) if (!fdpass_send(daemon_fd, fd))
break; break;
} else if (!wire_sync_write(daemon_fd, take(msg))) } else if (!wire_sync_write(daemon_fd, take(msg)))

Loading…
Cancel
Save