pthreads常量字符串损坏


pthreads const string corruption

在Ubuntu 3.13.0-66-generic 上使用PHP7 RC7和pthreads:3.1.0-dev的最新开发版本

我已经将一个问题缩小到一个简单的测试用例中,我得到的const值并没有像我预期的那样工作。

以下代码输出:value:v

何时应该是:value:|

const的值没有改变,如果我var_dump它,它仍然是一个|,但当它与字符串"value:"连接时,它似乎采用了字符串的第一个字符,而不是const的数值。我想是某种记忆泄露。我的代码?或者可能是个虫子?

似乎只有当字符串"value:"小于或等于6个字符并且使用const时才会导致问题。除此之外,一切似乎都很好。

如果我将cacheRecord设置为"Threaded",那么它确实解决了问题,但我以后无法删除/取消设置数组值,因为它是不可变的。

<?php
const FIELD_SEP = '|';
class cacheRecord
{
    public $field1;
    public $field2;
}
class cache extends Threaded
{
    public function run()
    {}
}
class socketThread extends Thread
{
    public function __construct($cache)
    {
        $this->cacheLogin = $cache;
    }
    public function run()
    {
        $cl = new cacheRecord;
        $cl->field1 = 'test123';
        $this->cacheLogin['myhash'] = $cl;
        $testString = FIELD_SEP.$cl->field1;
        echo 'value:'.FIELD_SEP."'n";
        unset($this->cacheLogin['myhash']);
    }
 }
$cache = new cache;
// Main
$socketThread = new socketThread($cache);
$socketThread->start();
$socketThread->join();

您在pthreads的那个版本中发现了一个错误,它在v3.1.1 中得到了修复