LP1998535 - Added Content Request Timeout user/stompro/lp1998535_added_content_timeout
authorJosh Stompro <stompro@stompro.org>
Fri, 2 Dec 2022 20:29:51 +0000 (14:29 -0600)
committerJosh Stompro <stompro@stompro.org>
Fri, 2 Dec 2022 20:29:51 +0000 (14:29 -0600)
Use an alarm signal to time out the LWP::UserAgent request
in addition to using the LWP::UA timeout.

The LWP::UA timeout doesn't work in some error situations.

Signed-off-by: Josh Stompro <stompro@stompro.org>
Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent.pm

index 254d790..be3d57a 100644 (file)
@@ -288,8 +288,15 @@ sub get_url {
 
     $logger->info("added content getting [timeout=$net_timeout, errors_remaining=$error_countdown] URL = $url");
     my $agent = LWP::UserAgent->new(timeout => $net_timeout);
+    my $res;
+
+    local $SIG{ALRM} = sub { die "ALARM TIMEOUT\n" };
+    eval {
+        alarm($net_timeout);
+        $res = $agent->get($url); 
+    };
+    alarm(0);
 
-    my $res = $agent->get($url); 
     $logger->info("added content request returned with code " . $res->code);
     die "added content request failed: " . $res->status_line ."\n" unless $res->is_success;
 
@@ -302,8 +309,15 @@ sub post_url {
 
     $logger->info("added content getting [timeout=$net_timeout, errors_remaining=$error_countdown] URL = $url");
     my $agent = LWP::UserAgent->new(timeout => $net_timeout);
+    my $res;
+
+    local $SIG{ALRM} = sub { die "ALARM TIMEOUT\n" };
+    eval {
+        alarm($net_timeout);
+        $res = $agent->post($url, Content => $content);
+    };
+    alarm(0);
 
-    my $res = $agent->post($url, Content => $content);
     $logger->info("added content request returned with code " . $res->code);
     die "added content request failed: " . $res->status_line ."\n" unless $res->is_success;