You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Travis Beauvais (JIRA)" <ji...@apache.org> on 2013/04/30 19:04:16 UTC

[jira] [Created] (THRIFT-1950) PHP gets stuck in infinite loop

Travis Beauvais created THRIFT-1950:
---------------------------------------

             Summary: PHP gets stuck in infinite loop
                 Key: THRIFT-1950
                 URL: https://issues.apache.org/jira/browse/THRIFT-1950
             Project: Thrift
          Issue Type: Bug
          Components: PHP - Library
    Affects Versions: 0.9
            Reporter: Travis Beauvais
            Priority: Critical


We have scripts that run continuously and make hundreds of calls to a service using the thrift PHP library. On the receiving side of the request, it occasionally gets stuck in an infinite loop which causes the processes to use up CPU and never die. This doesn't happen 100% of the time and the script will sometimes run for 10 minutes or more before this happens. We run 50 instances of the script and I can watch in htop when each one gets stuck. It happens when using the C binding as well as the PHP library. It happens in TTransport.php line 68-77.

  public function readAll($len) {
    // return $this->read($len);

    $data = '';
    $got = 0;
    while (($got = TStringFuncFactory::create()->strlen($data)) < $len) {
      $data .= $this->read($len - $got);
    }
    return $data;
  }

And in the C binding in php_thrift_protocol.cpp lines 317-330.

  void readBytes(void* buf, size_t len) {
    while (len) {
      size_t chunk_size = MIN(len, buffer_used);
      if (chunk_size) {
        memcpy(buf, buffer_ptr, chunk_size);
        buffer_ptr = reinterpret_cast<char*>(buffer_ptr) + chunk_size;
        buffer_used -= chunk_size;
        buf = reinterpret_cast<char*>(buf) + chunk_size;
        len -= chunk_size;
      }
      if (! len) break;
      refill();
    }
  }


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira