]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix crashes when socket write errors occur
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 14 Jun 2017 09:26:55 +0000 (10:26 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 14 Jun 2017 09:26:55 +0000 (10:26 +0100)
contrib/librdns/resolver.c
contrib/librdns/util.c

index ca93d78728933535416ceff4cdd38383638e0959..7fa61a3914a78e0bd9879e949005c71bd85a2400 100644 (file)
@@ -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);
 
index aa31c96b738a07df7a4a419bb82513d96508b450..b031289833b45f126b7ac26d78681665cd08d858 100644 (file)
@@ -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) {