From d38f233a80d879a2b9713edfffe8d5bb0303fb11 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Mon, 22 Jan 2018 16:32:17 +0100 Subject: [PATCH] Track readbuf free's As tcp_connection_destroy() might be called more than once per connection (depending on outstanding work) --- src/server.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/server.c b/src/server.c index ef5676f8..1f5f218d 100644 --- a/src/server.c +++ b/src/server.c @@ -138,11 +138,18 @@ static void tcp_connection_destroy(tcp_connection *conn) if (conn->fd >= 0) (void) _getdns_closesocket(conn->fd); - GETDNS_FREE(*mf, conn->read_buf); - for (cur = conn->to_write; cur; cur = next) { - next = cur->next; - GETDNS_FREE(*mf, cur); + if (conn->read_buf) { + GETDNS_FREE(*mf, conn->read_buf); + conn->read_buf = NULL; + } + if ((cur = conn->to_write)) { + while (cur) { + next = cur->next; + GETDNS_FREE(*mf, cur); + cur = next; + } + conn->to_write = NULL; } if (conn->to_answer > 0) return;