chiark / gitweb /
+ * Race near adns_beforeselect which could cause infinite timeout fixed
authorian <ian>
Sun, 7 May 2000 15:30:18 +0000 (15:30 +0000)
committerian <ian>
Sun, 7 May 2000 15:30:18 +0000 (15:30 +0000)
@@ -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.)

14 files changed:
changelog
regress/case-1stservbroken.sys
regress/case-2ndservtcp.sys
regress/case-abbrevto.sys
regress/case-datapluscnamewait.sys
regress/case-lockup.err [new file with mode: 0644]
regress/case-lockup.out [new file with mode: 0644]
regress/case-lockup.sys [new file with mode: 0644]
regress/case-manyptrwrongrst.sys
regress/case-norecurse2.sys
regress/case-norecurse3.sys
regress/case-rootqueryall.sys
src/adns.h
src/event.c

index 10a917455b7d171d2f6192da66e02f093e1a4497..bf73cfc1d220d30ff36c96d826d60f7f6c41c581 100644 (file)
--- 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
index 36c7837cb2707ffbe6087cf19281fa2db96808f6..2b1e9edf68f9971c033e38ac1c0fbe235c5511e2 100644 (file)
  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
  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
index 5267730ec28ab69238a6147027c2948846548ca1..0e6da2ed133298d3f5f36d92848a471bf7f22f62 100644 (file)
  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
index 3cfbcbf784e8c7d008e18ddc328f4cd1dd771d8e..ae1826c420465cd2727a32e0fc89aedc4ef4a930 100644 (file)
@@ -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
index 9051916ab92f113629e22ccf491b41c0b7fd15f6..77c5a132a840fcbbc465c6e7c1961dd13628e1e2 100644 (file)
@@ -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 (file)
index 0000000..e69de29
diff --git a/regress/case-lockup.out b/regress/case-lockup.out
new file mode 100644 (file)
index 0000000..a3f7495
--- /dev/null
@@ -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 (file)
index 0000000..8336d92
--- /dev/null
@@ -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
index 227264faa0fd335cb868fb62c168d570cefa0c52..cb0bdf0280799c53f6a53b80d3fd694b7e370daa 100644 (file)
@@ -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
index 388543f61e0f9b7ab7ef4884580d0aade3447814..1397bbf883f22d9c4433823112c4b85b06ca119d 100644 (file)
@@ -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
index f1ff264401b5e9dbb009cb2027cd2bc322698e4e..2daa4d5059cb56e09a0b70d0c87d154fcff0d629 100644 (file)
@@ -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.
index d20c07348f8ae3f9b003e85425fdf40f0d62ca0a..f38522d5407082340b89b0ca46ba729711e68225 100644 (file)
@@ -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
index 343501d109e9435fe67f131d6e1c8bcee60084b6..f5ffeae3b01d5feff17be51d14db22583c23e07e 100644 (file)
@@ -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,
index b82b5de397d9a9e7eeb9f007cc01c41a0d7fe33d..9e7bdc298756d125d2aec723a40da1b804ec9e11 100644 (file)
@@ -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);