Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-1950

PHP gets stuck in infinite loop

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Auto Closed
    • 0.9
    • None
    • PHP - Library
    • None

    Description

      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();
      }
      }

      Attachments

        Activity

          People

            jking3 James E. King III
            tbeauvais Travis Beauvais
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: