We're using the php beanstalk client: 
https://sourceforge.net/projects/beanstalk/
and have run into cases where the script will get stuck in an infinite
loop trying to read data from beanstalkd.  beanstalkd appears healthy
and requires no restart/interaction but the infinite loop causes all
communication w/beanstalk to cease.  In the logs we see the following:

Mar 27 07:25:18 172.16.4.18 BeanStalkWrapper.class.php[26403]: PHP
Warning:  stream_set_blocking(): supplied argument is not a valid
stream resource in /var/www/virtuals/shared/lib/BeanStalk.class.php on
line 1076
Mar 27 07:25:18 172.16.4.18 BeanStalkWrapper.class.php[26403]: PHP
Warning:  fread(): supplied argument is not a valid stream resource
in /var/www/virtuals/shared/lib/BeanStalk.class.php on line 1087
Mar 27 07:25:18 172.16.4.18 BeanStalkWrapper.class.php[26403]: PHP
Warning:  stream_set_blocking(): supplied argument is not a valid
stream resource in /var/www/virtuals/shared/lib/BeanStalk.class.php on
line 1076
Mar 27 07:25:18 172.16.4.18 BeanStalkWrapper.class.php[26403]: PHP
Warning:  fread(): supplied argument is not a valid stream resource
in /var/www/virtuals/shared/lib/BeanStalk.class.php on line 1087

The function that's raising the warnings is:
    private function read_message($in_buf_size=256,
$in_operation_timeout=-1) {
        stream_set_blocking($this->socket, 0);
        $in_buf_size += strlen(self::MSG_DELIM);
        $no_packet = true;         // Start off trying to hit up the
buffer
        $to = microtime(true) + $in_operation_timeout;
        do {
            if ($this->rbuflen < self::MAX_READ_BUF || $no_packet) {
                // read new data if we are under the read buffer size
or
                // if we couldnt find a complete message in the buffer
last
                // time

                $no_packet = false;
                $data = fread($this->socket,$in_buf_size);

                if ($data === false)
                    return self::READ_ERROR;

                if ($tbuflen = strlen($data))      // Got something.
Put it in the buffer.
                {
                    $this->rbuf .= $data;
                    $this->rbuflen += $tbuflen;
                }
            }

            if ($this->rbuflen && ($pos = strpos($this->rbuf,
self::MSG_DELIM, 0)) !== false) {
                // Found a packet
                $wanted_packet = substr($this->rbuf,0,$pos);
                $seek = $pos+strlen(self::MSG_DELIM);
                $this->rbuf = substr($this->rbuf,$seek);
                if (strlen($wanted_packet)) {
                    $this->rbuflen -= $seek;
                    if (BeanStalk::DEBUG)
                        echo __METHOD__."({$wanted_packet})\n";

                    return $wanted_packet;
                }
            }

            $no_packet = true;
        } while ($tbuflen);

        return self::READ_ERROR;
    }

Any help would be greatly appreciated.

-- 
You received this message because you are subscribed to the Google Groups 
"beanstalk-talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/beanstalk-talk?hl=en.

Reply via email to