Take the patch from FCGI::ProcManager Pod.
Tomas Doran [Thu, 28 Apr 2011 08:44:03 +0000 (09:44 +0100)]
This fixes process manager clean exit behaviour on SIGTERM or SIGHUP
by not looping around accept() in the C code. See ChangeLog entry for more
details

perl/ChangeLog
perl/FCGI.PL

index 0ffdd64..6e414e4 100644 (file)
@@ -1,3 +1,11 @@
+
+   o Change the Request function to pass FAIL_ON_INTR into the XS
+     RequestX function. This prevents the fcgi C client code from
+     looping around their accept() call. This change means that
+     when using CGI::Fast, and the process recieves SIGTERM or
+     SIGHUP, the error statusis correctly passed back up, allowing process
+     managers (such as FCGI::ProcManager) to correctly handle cleanly exiting.
+
 Version 0.71_01 --   24 Aug 2010 <bobtfish@bobtfish.net>
    o Restore old behavior when un-downgradeable uft8 is sent to FCGI.
      The first time this happens, a warning will be issued, but subsequently
index f7cf03f..d558d5c 100644 (file)
@@ -286,7 +286,7 @@ __END__
 *FAIL_ACCEPT_ON_INTR = sub() { 1 };
 
 sub Request(;***$*$) {
-    my @defaults = (\*STDIN, \*STDOUT, \*STDERR, \%ENV, 0, 0);
+    my @defaults = (\*STDIN, \*STDOUT, \*STDERR, \%ENV, 0, FAIL_ACCEPT_ON_INTR());
     $_[4] = fileno($_[4]) if defined($_[4]) && defined(fileno($_[4]));
     splice @defaults,0,@_,@_;
     RequestX(@defaults);