]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
fix bug #201 from trunk , and iana port update.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 4 Aug 2008 12:43:00 +0000 (12:43 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 4 Aug 2008 12:43:00 +0000 (12:43 +0000)
git-svn-id: file:///svn/unbound/branches/support-1.0@1174 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
services/outside_network.c
util/iana_ports.inc

index 16dbf0febf37168dbf897dcc981092e71f321332..eaa2ead215f8dd818a76b6ed32d1de1d630ec755 100644 (file)
@@ -1,3 +1,7 @@
+4 August 2008: Wouter
+       - Bug #201 fixup from trunk; fixes segfault on exit cleanup
+       - iana port nrs updated.
+
 30 July 2008: Wouter
        - fixup DS qtype validation bug. (fix taken from trunk).
 
index 9b1cf8159b3b6b5703cbd42e274c2933bfef8ed3..a7244e8e63f9a849e00f0c1e724b4f776255bfe1 100644 (file)
@@ -668,6 +668,23 @@ pending_delete(struct outside_network* outnet, struct pending* p)
 {
        if(!p)
                return;
+       if(outnet && outnet->udp_wait_first &&
+                (p->next_waiting || p == outnet->udp_wait_last) ) {
+                /* delete from waiting list, if it is in the waiting list */
+                struct pending* prev = NULL, *x = outnet->udp_wait_first;
+                while(x && x != p) {
+                        prev = x;
+                        x = x->next_waiting;
+                }
+                if(x) {
+                        log_assert(x == p);
+                        if(prev)
+                                prev->next_waiting = p->next_waiting;
+                        else    outnet->udp_wait_first = p->next_waiting;
+                        if(outnet->udp_wait_last == p)
+                                outnet->udp_wait_last = prev;
+                }
+        }
        if(outnet) {
                (void)rbtree_delete(outnet->pending, p->node.key);
        }
@@ -1067,7 +1084,8 @@ serviced_delete(struct serviced_query* sq)
                if(sq->status == serviced_query_UDP_EDNS ||
                        sq->status == serviced_query_UDP) {
                        struct pending* p = (struct pending*)sq->pending;
-                       portcomm_loweruse(sq->outnet, p->pc);
+                       if(p->pc)
+                               portcomm_loweruse(sq->outnet, p->pc);
                        pending_delete(sq->outnet, p);
                        outnet_send_wait_udp(sq->outnet);
                } else {
index ae9c8a967d77985c739d2e7e6e6c962b726608bc..3c41790f89c14691053bfa5a1087ec110379ffdc 100644 (file)
 24249,
 24321,
 24386,
+24465,
 24554,
 24677,
 24678,