diff options
author | Andrey Andreev <narf@devilix.net> | 2015-06-22 11:34:38 +0200 |
---|---|---|
committer | Andrey Andreev <narf@devilix.net> | 2015-06-22 11:34:38 +0200 |
commit | 4e0496e2d6d0bcf654235854d88f71b031e63cb0 (patch) | |
tree | d5e1f96a570c0d3efb916df3abea4c8b212bc33c /system/libraries/Xmlrpc.php | |
parent | d5784080dcd2c2699bc6fc33a644a1923ba79de8 (diff) |
Work-around for https://bugs.php.net/bug.php?id=39598
Fixes #3922
Diffstat (limited to 'system/libraries/Xmlrpc.php')
-rw-r--r-- | system/libraries/Xmlrpc.php | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/system/libraries/Xmlrpc.php b/system/libraries/Xmlrpc.php index 8fbc18f04..55555f56f 100644 --- a/system/libraries/Xmlrpc.php +++ b/system/libraries/Xmlrpc.php @@ -735,12 +735,32 @@ class XML_RPC_Client extends CI_Xmlrpc .'Content-Length: '.strlen($msg->payload).$r.$r .$msg->payload; - for ($written = 0, $length = strlen($op); $written < $length; $written += $result) + for ($written = $timestamp = 0, $length = strlen($op); $written < $length; $written += $result) { if (($result = fwrite($fp, substr($op, $written))) === FALSE) { break; } + // See https://bugs.php.net/bug.php?id=39598 and http://php.net/manual/en/function.fwrite.php#96951 + elseif ($result === 0) + { + if ($timestamp === 0) + { + $timestamp = time(); + } + elseif ($timestamp < (time() - $this->timeout)) + { + $result = FALSE; + break; + } + + usleep(250000); + continue; + } + else + { + $timestamp = 0; + } } if ($result === FALSE) |