From 6c68a59377bb39c45cf81bbc9072126ef974b865 Mon Sep 17 00:00:00 2001 From: ian Date: Sun, 7 May 2000 15:30:18 +0000 Subject: [PATCH] + * Race near adns_beforeselect which could cause infinite timeout fixed @@ -3,6 +3,8 @@ Bugfixes: + * Race near adns_beforeselect which could cause infinite timeout fixed + (it's now less agressive, and will more often return a zero timeout.) --- changelog | 2 + regress/case-1stservbroken.sys | 7 +- regress/case-2ndservtcp.sys | 7 +- regress/case-abbrevto.sys | 7 +- regress/case-datapluscnamewait.sys | 28 ++++-- regress/case-lockup.err | 0 regress/case-lockup.out | 4 + regress/case-lockup.sys | 135 +++++++++++++++++++++++++++++ regress/case-manyptrwrongrst.sys | 44 ++++++---- regress/case-norecurse2.sys | 30 +++++-- regress/case-norecurse3.sys | 40 ++++++--- regress/case-rootqueryall.sys | 23 +++-- src/adns.h | 7 +- src/event.c | 3 +- 14 files changed, 270 insertions(+), 67 deletions(-) create mode 100644 regress/case-lockup.err create mode 100644 regress/case-lockup.out create mode 100644 regress/case-lockup.sys diff --git a/changelog b/changelog index 10a9174..bf73cfc 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,8 @@ uadns (0.8) BETA; urgency=low * bug_if_query_done feature for debugging (SHOULD BE TAKEN OUT FOR RELEASE) Bugfixes: + * Race near adns_beforeselect which could cause infinite timeout fixed + (it's now less agressive, and will more often return a zero timeout.) * Spurious `server failure on unidentifiable query' warning suppressed. * adnslogres: cast chars to unsigned char before using ctype.h macros. * In _beforeselect, global failure now means zero timeout, and in diff --git a/regress/case-1stservbroken.sys b/regress/case-1stservbroken.sys index 36c7837..2b1e9ed 100644 --- a/regress/case-1stservbroken.sys +++ b/regress/case-1stservbroken.sys @@ -86,9 +86,12 @@ close fd=5 close=OK +0.000687 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 socket type=SOCK_STREAM socket=5 - +0.004866 + +0.004865 fcntl fd=5 cmd=F_GETFL fcntl=~O_NONBLOCK&... +0.000611 @@ -98,7 +101,7 @@ connect fd=5 addr=172.18.45.6:53 connect=EINPROGRESS +0.001082 - select max=6 rfds=[4] wfds=[5] efds=[] to=14.000000 + select max=6 rfds=[4] wfds=[5] efds=[] to=13.992868 select=1 rfds=[] wfds=[5] efds=[] +0.001011 read fd=5 buflen=1 diff --git a/regress/case-2ndservtcp.sys b/regress/case-2ndservtcp.sys index 5267730..0e6da2e 100644 --- a/regress/case-2ndservtcp.sys +++ b/regress/case-2ndservtcp.sys @@ -71,19 +71,22 @@ close fd=5 close=OK +0.000146 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 socket type=SOCK_STREAM socket=5 +0.000678 fcntl fd=5 cmd=F_GETFL fcntl=~O_NONBLOCK&... - +0.000042 + +0.000041 fcntl fd=5 cmd=F_SETFL O_NONBLOCK|... fcntl=OK +0.000039 connect fd=5 addr=172.18.45.6:53 connect=EINPROGRESS +0.000455 - select max=6 rfds=[4] wfds=[5] efds=[] to=14.000000 + select max=6 rfds=[4] wfds=[5] efds=[] to=13.998787 select=1 rfds=[] wfds=[5] efds=[] +0.000135 read fd=5 buflen=1 diff --git a/regress/case-abbrevto.sys b/regress/case-abbrevto.sys index 3cfbcbf..ae1826c 100644 --- a/regress/case-abbrevto.sys +++ b/regress/case-abbrevto.sys @@ -264,11 +264,14 @@ noserver 01. sendto=33 +0.000427 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.36:53 31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200 01. sendto=33 - +0.000318 + +0.000317 sendto fd=4 addr=172.18.45.36:53 31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500 01. @@ -334,7 +337,7 @@ noserver 01. sendto=33 +0.000274 - select max=5 rfds=[4] wfds=[] efds=[] to=1.999573 + select max=5 rfds=[4] wfds=[] efds=[] to=1.995581 select=0 rfds=[] wfds=[] efds=[] +2.-04960 select max=5 rfds=[4] wfds=[] efds=[] to=0.000541 diff --git a/regress/case-datapluscnamewait.sys b/regress/case-datapluscnamewait.sys index 9051916..77c5a13 100644 --- a/regress/case-datapluscnamewait.sys +++ b/regress/case-datapluscnamewait.sys @@ -247,12 +247,15 @@ default 64647204 61727061 00000100 01. sendto=45 +0.001211 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61 64647204 61727061 00000200 01. sendto=45 - +0.001067 - select max=5 rfds=[4] wfds=[] efds=[] to=0.019298 + +0.001066 + select max=5 rfds=[4] wfds=[] efds=[] to=0.018231 select=0 rfds=[] wfds=[] efds=[] +0.017752 select max=5 rfds=[4] wfds=[] efds=[] to=0.000479 @@ -290,12 +293,15 @@ default 64647204 61727061 00000f00 01. sendto=45 +0.001184 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61 64647204 61727061 00001000 01. sendto=45 - +0.001061 - select max=5 rfds=[4] wfds=[] efds=[] to=0.009461 + +0.001060 + select max=5 rfds=[4] wfds=[] efds=[] to=0.008400 select=0 rfds=[] wfds=[] efds=[] +0.007976 select max=5 rfds=[4] wfds=[] efds=[] to=0.000424 @@ -306,12 +312,15 @@ default 64647204 61727061 00001100 01. sendto=45 +0.001097 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31280100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61 64647204 61727061 00000100 01. sendto=45 - +0.000765 - select max=5 rfds=[4] wfds=[] efds=[] to=0.009230 + +0.000764 + select max=5 rfds=[4] wfds=[] efds=[] to=0.008465 select=0 rfds=[] wfds=[] efds=[] +0.008502 sendto fd=4 addr=172.18.45.6:53 @@ -421,12 +430,15 @@ default 64647204 61727061 00000100 01. sendto=45 +0.000740 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31290100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61 64647204 61727061 00000200 01. sendto=45 - +0.000707 - select max=5 rfds=[4] wfds=[] efds=[] to=0.038447 + +0.000706 + select max=5 rfds=[4] wfds=[] efds=[] to=0.037740 select=0 rfds=[] wfds=[] efds=[] +0.037284 select max=5 rfds=[4] wfds=[] efds=[] to=0.000456 diff --git a/regress/case-lockup.err b/regress/case-lockup.err new file mode 100644 index 0000000..e69de29 diff --git a/regress/case-lockup.out b/regress/case-lockup.out new file mode 100644 index 0000000..a3f7495 --- /dev/null +++ b/regress/case-lockup.out @@ -0,0 +1,4 @@ +adns debug: using nameserver 172.18.45.36 +chiark.greenend.org.uk flags 0 type 1 A(-) submitted +chiark.greenend.org.uk flags 0 type A(-): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770 +rc=0 diff --git a/regress/case-lockup.sys b/regress/case-lockup.sys new file mode 100644 index 0000000..8336d92 --- /dev/null +++ b/regress/case-lockup.sys @@ -0,0 +1,135 @@ +noserver +:1 chiark.greenend.org.uk + start 912889153.349504 + socket type=SOCK_DGRAM + socket=4 + +0.000193 + fcntl fd=4 cmd=F_GETFL + fcntl=~O_NONBLOCK&... + +0.000088 + fcntl fd=4 cmd=F_SETFL O_NONBLOCK|... + fcntl=OK + +0.000072 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000617 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999383 + select=0 rfds=[] wfds=[] efds=[] + +2.008683 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000406 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999594 + select=0 rfds=[] wfds=[] efds=[] + +2.009544 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000428 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999572 + select=0 rfds=[] wfds=[] efds=[] + +2.009567 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000449 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999551 + select=0 rfds=[] wfds=[] efds=[] + +2.009551 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000381 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999619 + select=0 rfds=[] wfds=[] efds=[] + +2.009614 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000383 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999617 + select=0 rfds=[] wfds=[] efds=[] + +2.009622 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000387 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999613 + select=0 rfds=[] wfds=[] efds=[] + +2.009603 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000404 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999596 + select=0 rfds=[] wfds=[] efds=[] + +2.009607 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000468 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999532 + select=0 rfds=[] wfds=[] efds=[] + +2.009526 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000431 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999569 + select=0 rfds=[] wfds=[] efds=[] + +2.009564 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000429 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999571 + select=0 rfds=[] wfds=[] efds=[] + +2.009586 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000479 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999521 + select=0 rfds=[] wfds=[] efds=[] + +2.009511 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000430 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999570 + select=0 rfds=[] wfds=[] efds=[] + +2.009571 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +0.000440 + select max=5 rfds=[4] wfds=[] efds=[] to=1.999560 + select=0 rfds=[] wfds=[] efds=[] + +2.009564 + sendto fd=4 addr=172.18.45.36:53 + 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267 + 02756b00 00010001. + sendto=40 + +2.000439 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 + close fd=4 + close=OK + +0.000267 diff --git a/regress/case-manyptrwrongrst.sys b/regress/case-manyptrwrongrst.sys index 227264f..cb0bdf0 100644 --- a/regress/case-manyptrwrongrst.sys +++ b/regress/case-manyptrwrongrst.sys @@ -205,54 +205,60 @@ default 72046172 70610000 110001. sendto=43 +0.002868 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31290100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464 72046172 70610000 020001. sendto=43 - +0.002428 - select max=5 rfds=[4] wfds=[] efds=[] to=0.000824 - select=1 rfds=[4] wfds=[] efds=[] + +0.002427 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] +0.004373 sendto fd=4 addr=172.18.45.6:53 312a0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464 72046172 70610000 0c0001. sendto=43 - +0.002426 + +0.002425 sendto fd=4 addr=172.18.45.6:53 312b0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464 72046172 70610000 0f0001. sendto=43 +0.002419 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=1 rfds=[4] wfds=[] efds=[] + +0.005328 + sendto fd=4 addr=172.18.45.6:53 + 312c0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464 + 72046172 70610000 060001. + sendto=43 + +0.002641 + sendto fd=4 addr=172.18.45.6:53 + 312d0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464 + 72046172 70610000 110001. + sendto=43 + +0.000001 recvfrom fd=4 buflen=512 *addrlen=16 recvfrom=OK addr=172.18.45.6:53 31298180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464 72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270 61000006 00010000 0258002e 026e7308 73656375 72697479 02636f02 6e7a0004 726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180. - +0.001124 + +0.000001 recvfrom fd=4 buflen=512 *addrlen=16 recvfrom=OK addr=172.18.45.6:53 31298180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464 72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270 61000006 00010000 0258002e 026e7308 73656375 72697479 02636f02 6e7a0004 726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180. - +0.003807 + +0.000001 recvfrom fd=4 buflen=512 *addrlen=16 recvfrom=EAGAIN - +0.000397 - sendto fd=4 addr=172.18.45.6:53 - 312c0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464 - 72046172 70610000 060001. - sendto=43 - +0.002641 - sendto fd=4 addr=172.18.45.6:53 - 312d0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464 - 72046172 70610000 110001. - sendto=43 - +0.002667 - select max=5 rfds=[4] wfds=[] efds=[] to=1.970184 + +0.002664 + select max=5 rfds=[4] wfds=[] efds=[] to=1.964877 select=1 rfds=[4] wfds=[] efds=[] - +0.003668 + +0.003669 recvfrom fd=4 buflen=512 *addrlen=16 recvfrom=OK addr=172.18.45.6:53 312b8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464 diff --git a/regress/case-norecurse2.sys b/regress/case-norecurse2.sys index 388543f..1397bbf 100644 --- a/regress/case-norecurse2.sys +++ b/regress/case-norecurse2.sys @@ -231,12 +231,15 @@ default -0x16 72046172 70610000 020001. sendto=43 +0.000484 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31210100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464 72046172 70610000 050001. sendto=43 - +0.000485 - select max=5 rfds=[4] wfds=[] efds=[] to=0.002425 + +0.000484 + select max=5 rfds=[4] wfds=[] efds=[] to=0.001940 select=1 rfds=[4] wfds=[] efds=[] +0.000119 recvfrom fd=4 buflen=512 *addrlen=16 @@ -277,7 +280,7 @@ default -0x16 312c0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464 72046172 70610000 060001. sendto=43 - +0.000488 + +0.000489 select max=5 rfds=[4] wfds=[] efds=[] to=1.980098 select=1 rfds=[4] wfds=[] efds=[] +0.000131 @@ -300,17 +303,20 @@ default -0x16 72046172 70610000 050001. sendto=43 +0.000505 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464 72046172 70610000 0c0001. sendto=43 - +0.000530 + +0.000529 sendto fd=4 addr=172.18.45.6:53 31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464 72046172 70610000 110001. sendto=43 +0.000468 - select max=5 rfds=[4] wfds=[] efds=[] to=0.009497 + select max=5 rfds=[4] wfds=[] efds=[] to=0.008498 select=0 rfds=[] wfds=[] efds=[] +0.008500 sendto fd=4 addr=172.18.45.6:53 @@ -326,17 +332,20 @@ default -0x16 72046172 70610000 050001. sendto=43 +0.000537 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464 72046172 70610000 0c0001. sendto=43 - +0.000485 + +0.000484 sendto fd=4 addr=172.18.45.6:53 31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464 72046172 70610000 110001. sendto=43 +0.000487 - select max=5 rfds=[4] wfds=[] efds=[] to=0.009450 + select max=5 rfds=[4] wfds=[] efds=[] to=0.008478 select=0 rfds=[] wfds=[] efds=[] +0.008478 select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 @@ -355,17 +364,20 @@ default -0x16 72046172 70610000 050001. sendto=43 +0.000612 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464 72046172 70610000 0c0001. sendto=43 - +0.000552 + +0.000551 sendto fd=4 addr=172.18.45.6:53 31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464 72046172 70610000 110001. sendto=43 +0.000564 - select max=5 rfds=[4] wfds=[] efds=[] to=0.009474 + select max=5 rfds=[4] wfds=[] efds=[] to=0.008358 select=0 rfds=[] wfds=[] efds=[] +0.008252 select max=5 rfds=[4] wfds=[] efds=[] to=0.000106 diff --git a/regress/case-norecurse3.sys b/regress/case-norecurse3.sys index f1ff264..2daa4d5 100644 --- a/regress/case-norecurse3.sys +++ b/regress/case-norecurse3.sys @@ -151,19 +151,25 @@ default -0x16 64720561 72706131 00000500 01. sendto=45 +0.000438 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31220100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164 64720561 72706131 00000600 01. sendto=45 - +0.000483 - select max=5 rfds=[4] wfds=[] efds=[] to=0.000057 + +0.000482 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 select=0 rfds=[] wfds=[] efds=[] - +0.008066 + +0.000001 sendto fd=4 addr=172.18.45.6:53 31230100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164 64720561 72706131 00000c00 01. sendto=45 - +0.000453 + +0.000001 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000861 + select=0 rfds=[] wfds=[] efds=[] + +0.008517 sendto fd=4 addr=172.18.45.6:53 31240100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164 64720561 72706131 00000d00 01. @@ -194,11 +200,14 @@ default -0x16 64720561 72706131 00000200 01. sendto=45 +0.000829 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 312a0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164 64720561 72706131 00000c00 01. sendto=45 - +0.000488 + +0.000487 sendto fd=4 addr=172.18.45.6:53 312b0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164 64720561 72706131 00000f00 01. @@ -209,17 +218,17 @@ default -0x16 64720561 72706131 00000600 01. sendto=45 +0.000430 - select max=5 rfds=[4] wfds=[] efds=[] to=0.001297 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 select=0 rfds=[] wfds=[] efds=[] - +0.005148 + +0.000001 sendto fd=4 addr=172.18.45.6:53 312d0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164 64720561 72706131 00001100 01. sendto=45 - +0.000447 - select max=5 rfds=[4] wfds=[] efds=[] to=1.979550 + +0.000001 + select max=5 rfds=[4] wfds=[] efds=[] to=1.985143 select=0 rfds=[] wfds=[] efds=[] - +2.-20428 + +1.985166 sendto fd=4 addr=172.18.45.6:53 311f0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164 64720561 72706131 00000100 01. @@ -235,14 +244,14 @@ default -0x16 64720561 72706131 00000500 01. sendto=45 +0.000455 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31220100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164 64720561 72706131 00000600 01. sendto=45 - +0.000483 - select max=5 rfds=[4] wfds=[] efds=[] to=0.008522 - select=0 rfds=[] wfds=[] efds=[] - +0.008039 + +0.000482 select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 select=0 rfds=[] wfds=[] efds=[] +0.000145 @@ -251,6 +260,9 @@ default -0x16 64720561 72706131 00000c00 01. sendto=45 +0.000448 + select max=5 rfds=[4] wfds=[] efds=[] to=0.007898 + select=0 rfds=[] wfds=[] efds=[] + +0.008039 sendto fd=4 addr=172.18.45.6:53 31240100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164 64720561 72706131 00000d00 01. diff --git a/regress/case-rootqueryall.sys b/regress/case-rootqueryall.sys index d20c073..f38522d 100644 --- a/regress/case-rootqueryall.sys +++ b/regress/case-rootqueryall.sys @@ -377,10 +377,13 @@ default -,s 31300100 00010000 00000000 00000500 01. sendto=17 +0.000710 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31320100 00010000 00000000 00000c00 01. sendto=17 - +0.000724 + +0.000723 sendto fd=4 addr=172.18.45.6:53 31330100 00010000 00000000 00000d00 01. sendto=17 @@ -413,7 +416,7 @@ default -,s 313c0100 00010000 00000000 00001100 01. sendto=17 +0.000681 - select max=5 rfds=[4] wfds=[] efds=[] to=1.989843 + select max=5 rfds=[4] wfds=[] efds=[] to=1.983502 select=0 rfds=[] wfds=[] efds=[] +2.-06971 sendto fd=4 addr=172.18.45.6:53 @@ -468,10 +471,13 @@ default -,s 31300100 00010000 00000000 00000500 01. sendto=17 +0.000709 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31320100 00010000 00000000 00000c00 01. sendto=17 - +0.000721 + +0.000720 sendto fd=4 addr=172.18.45.6:53 31330100 00010000 00000000 00000d00 01. sendto=17 @@ -504,7 +510,7 @@ default -,s 313c0100 00010000 00000000 00001100 01. sendto=17 +0.000682 - select max=5 rfds=[4] wfds=[] efds=[] to=1.989780 + select max=5 rfds=[4] wfds=[] efds=[] to=1.983562 select=0 rfds=[] wfds=[] efds=[] +2.-06911 sendto fd=4 addr=172.18.45.6:53 @@ -559,10 +565,13 @@ default -,s 31300100 00010000 00000000 00000500 01. sendto=17 +0.000689 + select max=5 rfds=[4] wfds=[] efds=[] to=0.000000 + select=0 rfds=[] wfds=[] efds=[] + +0.000001 sendto fd=4 addr=172.18.45.6:53 31320100 00010000 00000000 00000c00 01. sendto=17 - +0.000743 + +0.000742 sendto fd=4 addr=172.18.45.6:53 31330100 00010000 00000000 00000d00 01. sendto=17 @@ -595,7 +604,7 @@ default -,s 313c0100 00010000 00000000 00001100 01. sendto=17 +0.000678 - select max=5 rfds=[4] wfds=[] efds=[] to=1.990318 + select max=5 rfds=[4] wfds=[] efds=[] to=1.981795 select=1 rfds=[4] wfds=[] efds=[] +0.010527 recvfrom fd=4 buflen=512 *addrlen=16 @@ -870,7 +879,7 @@ default -,s +0.000584 recvfrom fd=4 buflen=512 *addrlen=16 recvfrom=EAGAIN - +0.000123 + +0.000124 select max=5 rfds=[4] wfds=[] efds=[] to=0.361302 select=1 rfds=[4] wfds=[] efds=[] +0.029558 diff --git a/src/adns.h b/src/adns.h index 343501d..f5ffeae 100644 --- a/src/adns.h +++ b/src/adns.h @@ -663,9 +663,10 @@ void adns_beforeselect(adns_state ads, int *maxfd, fd_set *readfds, * for adns_firsttimeout. readfds, writefds, exceptfds and maxfd_io may * not be 0. * - * If now is not 0 then this will never actually do any I/O, or - * change the fds that adns is using or the timeouts it wants. In any - * case it won't block. + * If now is not 0 then this will never actually do any I/O, or change + * the fds that adns is using or the timeouts it wants. In any case + * it won't block, and it will set the timeout to zero if a query + * finishes in _beforeselect. */ void adns_afterselect(adns_state ads, int maxfd, const fd_set *readfds, diff --git a/src/event.c b/src/event.c index b82b5de..9e7bdc2 100644 --- a/src/event.c +++ b/src/event.c @@ -304,6 +304,7 @@ int adns__pollfds(adns_state ads, struct pollfd pollfds_buf[MAX_POLLFDS]) { switch (ads->tcpstate) { case server_disconnected: + case server_broken: return 1; case server_connecting: pollfds_buf[1].events= POLLOUT; @@ -541,7 +542,7 @@ void adns_beforeselect(adns_state ads, int *maxfd_io, fd_set *readfds_io, /* The caller is planning to sleep. */ adns__must_gettimeofday(ads,&now,&tv_nowbuf); if (!now) { inter_immed(tv_mod,tv_tobuf); goto xit; } - adns__timeouts(ads, 1, tv_mod,tv_tobuf, *now); + adns__timeouts(ads, 0, tv_mod,tv_tobuf, *now); } npollfds= adns__pollfds(ads,pollfds); -- 2.30.2