LWP doesn't honour timeouts for HTTPS, so use an alarm instead

This should close Bugilla Bug #1609
http://old.linux-foundation.org/developer_bugzilla/show_bug.cgi?id=1609

Signed-off-by: Simon Horman <[EMAIL PROTECTED]>
Index: heartbeat/ldirectord/ldirectord.in
===================================================================
--- heartbeat.orig/ldirectord/ldirectord.in     2007-07-03 14:07:08.000000000 
+0900
+++ heartbeat/ldirectord/ldirectord.in  2007-07-03 16:03:58.000000000 +0900
@@ -2117,17 +2122,31 @@ sub check_http
                . "virtualhost=\"$virtualhost\"");
        
        my $ua = new LWP::UserAgent();
-       $ua->timeout($$v{checktimeout});
        my $h = new  HTTP::Headers("Host" => $virtualhost);
        my $req = new HTTP::Request("$$v{httpmethod}", "$$r{url}", $h);
        my $res;
-       {
+
+       # LWP does not seem to honour timeouts set using $ua->timeout()
+       # for HTTPS. So use an alarm instead. This also has the advantage
+       # of being cumulative timeout, rather than a per send/receive
+       # timeout.
+       eval {
                # LWP makes ungaurded calls to eval
                # which throw a fatal exception if they fail
                # Needless to say, this is completely stupid.
+               # Resetting of $SIG{'__DIE__'} is also
+               # needed now that alarm() is used.
                local $SIG{'__DIE__'} = "DEFAULT";
+               local $SIG{'ALRM'} = sub { die "Timeout Alarm" };
+               &ld_debug(4, "Timeout is $$v{checktimeout}");
+               &ld_debug(2, "Starting Check");
+               alarm $$v{checktimeout};
+
+               &ld_debug(2, "Starting HTTP/HTTPS");
                $res = $ua->request($req);
-       }
+               &ld_debug(2, "Finished HTTP/HTTPS");
+               alarm 0; # Cancel the alarm
+       };
 
        if ($$v{service} eq "https") {
                &ld_debug(2, "SSL-Cipher: " . 

-- 

-- 
Horms
  H: http://www.vergenet.net/~horms/
  W: http://www.valinux.co.jp/en/

_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to