From d8b7b5ee27c002682228a69a07c7ed7a152422d5 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 9 Jun 2020 09:14:01 +0200 Subject: [PATCH] fix to set pending pointer in reuse tcp structure fix debug output of reuse tcp and test leak of process --- services/outside_network.c | 6 ++++-- testdata/tcp_reuse.tdir/tcp_reuse.post | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index bb0792c06..f11999d7c 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -457,6 +457,7 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) pend->query = w; pend->c->repinfo.addrlen = w->addrlen; memcpy(&pend->c->repinfo.addr, &w->addr, w->addrlen); + pend->reuse.pending = pend; outnet_tcp_take_query_setup(s, pend, pkt, pkt_len); return 1; } @@ -550,8 +551,8 @@ log_reuse_tcp(enum verbosity_value v, const char* msg, struct reuse_tcp* reuse) if(verbosity < v) return; addr_to_str(&reuse->addr, reuse->addrlen, addrbuf, sizeof(addrbuf)); port = ntohs(((struct sockaddr_in*)&reuse->addr)->sin_port); - verbose(v, "%s %s %u %lx", msg, addrbuf, (unsigned)port, - (unsigned long)reuse); + verbose(v, "%s %s#%u 0x%llx fd %d", msg, addrbuf, (unsigned)port, + (unsigned long long)reuse, reuse->pending->c->fd); } /** insert into reuse tcp tree and LRU, false on failure (duplicate) */ @@ -1734,6 +1735,7 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, verbose(5, "pending_tcp_query: new fd, connect"); /* create new fd and connect to addr, setup to * write query */ + pend->reuse.pending = pend; memcpy(&pend->reuse.addr, &sq->addr, sq->addrlen); pend->reuse.addrlen = sq->addrlen; if(!outnet_tcp_take_into_use(w, diff --git a/testdata/tcp_reuse.tdir/tcp_reuse.post b/testdata/tcp_reuse.tdir/tcp_reuse.post index a1cdef9ab..ca7535471 100644 --- a/testdata/tcp_reuse.tdir/tcp_reuse.post +++ b/testdata/tcp_reuse.tdir/tcp_reuse.post @@ -6,7 +6,7 @@ # # do your teardown here . ../common.sh -kill_pid $UPSTREAM_PID +kill_pid `cat unbound2.pid` if test -f unbound2.log; then echo ">>> upstream log" cat unbound2.log