From 34a8c93ce30342a01f0f5ba6b88d625c45974332 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 14 Jun 2017 10:26:55 +0100 Subject: [PATCH] [Fix] Fix crashes when socket write errors occur --- contrib/librdns/resolver.c | 3 +++ contrib/librdns/util.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/contrib/librdns/resolver.c b/contrib/librdns/resolver.c index ca93d7872..7fa61a391 100644 --- a/contrib/librdns/resolver.c +++ b/contrib/librdns/resolver.c @@ -402,6 +402,8 @@ rdns_process_timer (void *arg) if (!renew) { req->async->del_timer (req->async->data, req->async_event); + req->async_event = NULL; + HASH_DEL (req->io->requests, req); } /* We have not scheduled timeout actually due to send error */ @@ -480,6 +482,7 @@ rdns_process_retransmit (int fd, void *arg) resolver->async->del_write (resolver->async->data, req->async_event); + req->async_event = NULL; r = rdns_send_request (req, fd, false); diff --git a/contrib/librdns/util.c b/contrib/librdns/util.c index aa31c96b7..b03128983 100644 --- a/contrib/librdns/util.c +++ b/contrib/librdns/util.c @@ -409,12 +409,16 @@ rdns_request_free (struct rdns_request *req) req->async_event); /* Remove from id hashes */ HASH_DEL (req->io->requests, req); + req->async_event = NULL; } else if (req->state == RDNS_REQUEST_WAIT_SEND) { /* Remove retransmit event */ req->async->del_write (req->async->data, req->async_event); + HASH_DEL (req->io->requests, req); + req->async_event = NULL; } + } #ifdef TWEETNACL if (req->curve_plugin_data != NULL) { -- 2.39.5