[前][次][番号順一覧][スレッド一覧]

ruby-changes:21535

From: akr <ko1@a...>
Date: Mon, 31 Oct 2011 21:03:59 +0900 (JST)
Subject: [ruby-changes:21535] akr:r33584 (trunk): * lib/resolv.rb (Resolv::DNS): retry IO.select for premature wakeup.

akr	2011-10-31 21:03:49 +0900 (Mon, 31 Oct 2011)

  New Revision: 33584

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=33584

  Log:
    * lib/resolv.rb (Resolv::DNS): retry IO.select for premature wakeup.

  Modified files:
    trunk/ChangeLog
    trunk/lib/resolv.rb
    trunk/test/resolv/test_dns.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 33583)
+++ ChangeLog	(revision 33584)
@@ -1,3 +1,7 @@
+Mon Oct 31 21:02:43 2011  Tanaka Akira  <akr@f...>
+
+	* lib/resolv.rb (Resolv::DNS): retry IO.select for premature wakeup.
+
 Mon Oct 31 20:14:22 2011  Tanaka Akira  <akr@f...>
 
 	* io.c (fd_set_cloexec): clear CLOEXEC flag for standard file
Index: lib/resolv.rb
===================================================================
--- lib/resolv.rb	(revision 33583)
+++ lib/resolv.rb	(revision 33584)
@@ -657,16 +657,19 @@
       end
 
       def request(sender, tout)
-        timelimit = Time.now + tout
+        start = Time.now
+        timelimit = start + tout
         sender.send
         while true
-          now = Time.now
-          timeout = timelimit - now
+          before_select = Time.now
+          timeout = timelimit - before_select
           if timeout <= 0
             raise ResolvTimeout
           end
           select_result = IO.select(@socks, nil, nil, timeout)
           if !select_result
+            after_select = Time.now
+            next if after_select < timelimit
             raise ResolvTimeout
           end
           begin
Index: test/resolv/test_dns.rb
===================================================================
--- test/resolv/test_dns.rb	(revision 33583)
+++ test/resolv/test_dns.rb	(revision 33584)
@@ -114,7 +114,8 @@
         start = Time.now
         dns.getresources("foo.example.org", Resolv::DNS::Resource::IN::A)
       }
-      diff = Time.now - start
+      t2 = Time.now
+      diff = t2 - start
       assert rv.empty?, "unexpected: #{rv.inspect} (expected empty)"
       assert_operator 0.1, :<=, diff
 
@@ -123,7 +124,8 @@
         start = Time.now
         dns.getresources("foo.example.org", Resolv::DNS::Resource::IN::A)
       }
-      diff = Time.now - start
+      t2 = Time.now
+      diff = t2 - start
       assert rv.empty?, "unexpected: #{rv.inspect} (expected empty)"
       assert_operator 0.3, :<=, diff
     }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]