Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2 / zend_gc.c

[email protected] (Dmitry Stogov)
Newsgroups php.zend-engine.cvs
Message-ID <[email protected]>
So thank you for doing this. It was my fault.

I already thought that I had done similar changes in all necessary
places in the past. :)

Thanks. Dmitry.

Arnaud Le Blanc wrote:
> Hi,
> 
> On Monday 15 September 2008 12:18:58 Dmitry Stogov wrote:
>> Hi Arnaud,
>>
>> I afraid you patch might change the behavior of some scripts.
>> At least after the following code you'll probably have invalid $GLOBALS
>> refcount.
>>
>> <?php
>> $a = array();
>> $a[0] =& $a;
>> $a[1] =& $GLOBALS; // refcount++
>> unset($a);
>> var_dump(gc_collect_cycles()); // you have disabled refcount--
>> ?>
>>
>> Were you going to fix a bug?
>> Could you please show a test case?
>>
>> I might be wrong as I did just source review and didn't run any tests
>> yet. I just very worried about any GC changes as they can be reasons of
>> errors which are very hard to catch.
> 
> This is a merge from PHP_5_3 of the following commit:
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_gc.c#rev1.1.2.10
> 
> It fixes the following test: Zend/tests/gc_010.phpt (valgrind results: 
> http://gcov.php.net/viewer.php?version=PHP_HEAD&func=valgrind&file=Zend%2Ftests%2Fgc_010.phpt 
> )
> 
>> Thanks. Dmitry.
>>
>> Arnaud Le Blanc wrote:
>>> lbarnaud		Sun Sep 14 15:20:16 2008 UTC
>>>
>>>   Modified files:              
>>>     /ZendEngine2	zend_gc.c 
>>>   Log:
>>>   MFB "Disabled $GLOBALS' refcount modification"
>>>   
>>>   
>>>
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_gc.c?r1=1.17&r2=1.18&diff_format=u
>>> Index: ZendEngine2/zend_gc.c
>>> diff -u ZendEngine2/zend_gc.c:1.17 ZendEngine2/zend_gc.c:1.18
>>> --- ZendEngine2/zend_gc.c:1.17	Sun Aug 24 16:45:50 2008
>>> +++ ZendEngine2/zend_gc.c	Sun Sep 14 15:20:16 2008
>>> @@ -17,7 +17,7 @@
>>>     
> +----------------------------------------------------------------------+
>>>  */
>>>  
>>> -/* $Id: zend_gc.c,v 1.17 2008/08/24 16:45:50 helly Exp $ */
>>> +/* $Id: zend_gc.c,v 1.18 2008/09/14 15:20:16 lbarnaud Exp $ */
>>>  
>>>  #include "zend.h"
>>>  #include "zend_API.h"
>>> @@ -302,7 +302,9 @@
>>>  
>>>  static int children_scan_black(zval **pz TSRMLS_DC)
>>>  {
>>> -	(*pz)->refcount__gc++;
>>> +	if (Z_TYPE_PP(pz) != IS_ARRAY || Z_ARRVAL_PP(pz) != &EG(symbol_table)) {
>>> +		(*pz)->refcount__gc++;
>>> +	}
>>>  
>>>  	if (GC_ZVAL_GET_COLOR(*pz) != GC_BLACK) {
>>>  		zval_scan_black(*pz TSRMLS_CC);
>>> @@ -346,7 +348,9 @@
>>>  
>>>  static int children_mark_grey(zval **pz TSRMLS_DC)
>>>  {
>>> -	(*pz)->refcount__gc--;
>>> +	if (Z_TYPE_PP(pz) != IS_ARRAY || Z_ARRVAL_PP(pz) != &EG(symbol_table)) {
>>> +		(*pz)->refcount__gc--;
>>> +	}
>>>  	zval_mark_grey(*pz TSRMLS_CC);
>>>  	return 0;
>>>  }
>>>
>>>
>>>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.