Bug 6620 Ensure autoflush is set on output filehandles
authorColin Campbell <colin.campbell@ptfs-europe.com>
Thu, 21 Jul 2011 11:16:22 +0000 (12:16 +0100)
committerChris Cormack <chrisc@catalyst.net.nz>
Wed, 14 Sep 2011 09:40:45 +0000 (21:40 +1200)
stdout is by default buffered and a flush is only guaranteed on CR
Sip responses are not CR terminated so we need to ensure autoflush
is switched on  so that the filehandle is flushed after a print
Otherwise this can manifest as self checks running slow or
failing due to timeout (although in the log we see the response)

Signed-off-by: Ulrich Kleiber <ulrich.kleiber@bsz-bw.de>
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
C4/SIP/Sip.pm

index 8a0f067..337cc0e 100644 (file)
@@ -12,6 +12,7 @@ use Exporter;
 use Sys::Syslog qw(syslog);
 use POSIX qw(strftime);
 use Socket qw(:crlf);
+use IO::Handle;
 
 use Sip::Constants qw(SIP_DATETIME);
 use Sip::Checksum qw(checksum);
@@ -230,9 +231,11 @@ sub write_msg {
 
 
     if ($file) {
+        $file->autoflush(1);
         print $file "$msg\r";
     } else {
-        print "$msg\r";
+        STDOUT->autoflush(1);
+        print $msg, "\r";
         syslog("LOG_INFO", "OUTPUT MSG: '$msg'");
     }