[
https://issues.apache.org/jira/browse/THRIFT-1950?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16724243#comment-16724243
]
James E. King III commented on THRIFT-1950:
-------------------------------------------
Still a problem?
> 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 was sent by Atlassian JIRA
(v7.6.3#76005)