dmitry Tue Jan 22 09:27:50 2008 UTC Added files: (Branch: PHP_5_3) /ZendEngine2 zend_gc.c zend_gc.h /ZendEngine2/tests gc_001.phpt gc_002.phpt gc_003.phpt gc_004.phpt gc_005.phpt gc_006.phpt gc_007.phpt gc_008.phpt gc_009.phpt gc_010.phpt gc_011.phpt gc_012.phpt gc_013.phpt gc_014.phpt gc_015.phpt gc_016.phpt gc_017.phpt gc_018.phpt gc_019.phpt gc_020.phpt gc_021.phpt gc_022.phpt gc_023.phpt gc_024.phpt gc_025.phpt gc_026.phpt
Modified files: /php-src NEWS configure.in /ZendEngine2 zend.c zend.h zend_builtin_functions.c zend_execute.c zend_execute_API.c zend_objects_API.c zend_objects_API.h zend_operators.c zend_vm_def.h zend_vm_execute.h /php-src/main main.c Log: Added garbage collector
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.82&r2=1.2027.2.547.2.965.2.83&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.965.2.82 php-src/NEWS:1.2027.2.547.2.965.2.83 --- php-src/NEWS:1.2027.2.547.2.965.2.82 Mon Jan 21 21:55:54 2008 +++ php-src/NEWS Tue Jan 22 09:27:46 2008 @@ -1,6 +1,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 20??, PHP 5.3.0 +- Added garbage collector. (David Wang, Dmitry). - Added new date/time functionality: * date_parse_from_format(): Parse date/time strings according to a format. http://cvs.php.net/viewvc.cgi/php-src/configure.in?r1=1.579.2.52.2.77.2.6&r2=1.579.2.52.2.77.2.7&diff_format=u Index: php-src/configure.in diff -u php-src/configure.in:1.579.2.52.2.77.2.6 php-src/configure.in:1.579.2.52.2.77.2.7 --- php-src/configure.in:1.579.2.52.2.77.2.6 Tue Nov 6 11:50:51 2007 +++ php-src/configure.in Tue Jan 22 09:27:46 2008 @@ -1,4 +1,4 @@ -## $Id: configure.in,v 1.579.2.52.2.77.2.6 2007/11/06 11:50:51 helly Exp $ -*- autoconf -*- +## $Id: configure.in,v 1.579.2.52.2.77.2.7 2008/01/22 09:27:46 dmitry Exp $ -*- autoconf -*- dnl ## Process this file with autoconf to produce a configure script. divert(1) @@ -1326,7 +1326,7 @@ zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \ zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \ zend_ini.c zend_qsort.c zend_multibyte.c zend_ts_hash.c zend_stream.c \ - zend_iterators.c zend_interfaces.c zend_exceptions.c zend_strtod.c) + zend_iterators.c zend_interfaces.c zend_exceptions.c zend_strtod.c zend_gc.c) if test -r "$abs_srcdir/Zend/zend_objects.c"; then PHP_ADD_SOURCES(Zend, zend_objects.c zend_object_handlers.c zend_objects_API.c \ http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.c?r1=1.308.2.12.2.35.2.4&r2=1.308.2.12.2.35.2.5&diff_format=u Index: ZendEngine2/zend.c diff -u ZendEngine2/zend.c:1.308.2.12.2.35.2.4 ZendEngine2/zend.c:1.308.2.12.2.35.2.5 --- ZendEngine2/zend.c:1.308.2.12.2.35.2.4 Mon Dec 31 07:17:03 2007 +++ ZendEngine2/zend.c Tue Jan 22 09:27:46 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.c,v 1.308.2.12.2.35.2.4 2007/12/31 07:17:03 sebastian Exp $ */ +/* $Id: zend.c,v 1.308.2.12.2.35.2.5 2008/01/22 09:27:46 dmitry Exp $ */ #include "zend.h" #include "zend_extensions.h" @@ -74,8 +74,21 @@ } /* }}} */ +static ZEND_INI_MH(OnUpdateGCEnabled) /* {{{ */ +{ + OnUpdateBool(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + + if (GC_G(gc_enabled)) { + gc_init(TSRMLS_C); + } + + return SUCCESS; +} +/* }}} */ + ZEND_INI_BEGIN() ZEND_INI_ENTRY("error_reporting", NULL, ZEND_INI_ALL, OnUpdateErrorReporting) + STD_ZEND_INI_BOOLEAN("zend.enable_gc", "1", ZEND_INI_ALL, OnUpdateGCEnabled, gc_enabled, zend_gc_globals, gc_globals) STD_ZEND_INI_BOOLEAN("zend.ze1_compatibility_mode", "0", ZEND_INI_ALL, OnUpdateBool, ze1_compatibility_mode, zend_executor_globals, executor_globals) #ifdef ZEND_MULTIBYTE STD_ZEND_INI_BOOLEAN("detect_unicode", "1", ZEND_INI_ALL, OnUpdateBool, detect_unicode, zend_compiler_globals, compiler_globals) @@ -822,6 +835,7 @@ void zend_activate(TSRMLS_D) /* {{{ */ { + gc_reset(TSRMLS_C); init_compiler(TSRMLS_C); init_executor(TSRMLS_C); startup_scanner(TSRMLS_C); @@ -871,6 +885,12 @@ zend_destroy_rsrc_list(&EG(regular_list) TSRMLS_CC); +#ifdef ZEND_DEBUG + if (GC_G(gc_enabled) && !CG(unclean_shutdown)) { + gc_collect_cycles(TSRMLS_C); + } +#endif + zend_try { zend_ini_deactivate(TSRMLS_C); } zend_end_try(); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.h?r1=1.293.2.11.2.9.2.15&r2=1.293.2.11.2.9.2.16&diff_format=u Index: ZendEngine2/zend.h diff -u ZendEngine2/zend.h:1.293.2.11.2.9.2.15 ZendEngine2/zend.h:1.293.2.11.2.9.2.16 --- ZendEngine2/zend.h:1.293.2.11.2.9.2.15 Mon Dec 31 07:17:04 2007 +++ ZendEngine2/zend.h Tue Jan 22 09:27:46 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.h,v 1.293.2.11.2.9.2.15 2007/12/31 07:17:04 sebastian Exp $ */ +/* $Id: zend.h,v 1.293.2.11.2.9.2.16 2008/01/22 09:27:46 dmitry Exp $ */ #ifndef ZEND_H #define ZEND_H @@ -709,6 +709,7 @@ #define ZEND_MAX_RESERVED_RESOURCES 4 +#include "zend_gc.h" #include "zend_operators.h" #include "zend_variables.h" http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_builtin_functions.c?r1=1.277.2.12.2.25.2.7&r2=1.277.2.12.2.25.2.8&diff_format=u Index: ZendEngine2/zend_builtin_functions.c diff -u ZendEngine2/zend_builtin_functions.c:1.277.2.12.2.25.2.7 ZendEngine2/zend_builtin_functions.c:1.277.2.12.2.25.2.8 --- ZendEngine2/zend_builtin_functions.c:1.277.2.12.2.25.2.7 Mon Dec 31 07:17:04 2007 +++ ZendEngine2/zend_builtin_functions.c Tue Jan 22 09:27:47 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_builtin_functions.c,v 1.277.2.12.2.25.2.7 2007/12/31 07:17:04 sebastian Exp $ */ +/* $Id: zend_builtin_functions.c,v 1.277.2.12.2.25.2.8 2008/01/22 09:27:47 dmitry Exp $ */ #include "zend.h" #include "zend_API.h" @@ -85,6 +85,10 @@ static ZEND_FUNCTION(zend_thread_id); #endif #endif +static ZEND_FUNCTION(gc_collect_cycles); +static ZEND_FUNCTION(gc_enabled); +static ZEND_FUNCTION(gc_enable); +static ZEND_FUNCTION(gc_disable); #include "zend_arg_defs.c" @@ -148,6 +152,10 @@ ZEND_FE(zend_thread_id, NULL) #endif #endif + ZEND_FE(gc_collect_cycles, NULL) + ZEND_FE(gc_enabled, NULL) + ZEND_FE(gc_enable, NULL) + ZEND_FE(gc_disable, NULL) { NULL, NULL, NULL } }; @@ -166,6 +174,38 @@ } /* }}} */ +/* {{{ proto int gc_collect_cycles(void) + Forces collection of any existing garbage cycles. + Returns number of freed zvals */ +ZEND_FUNCTION(gc_collect_cycles) +{ + RETURN_LONG(gc_collect_cycles(TSRMLS_C)); +} +/* }}} */ + +/* {{{ proto void gc_enabled(void) + Returns status of the circular reference collector */ +ZEND_FUNCTION(gc_enabled) +{ + RETURN_BOOL(GC_G(gc_enabled)); +} +/* }}} */ + +/* {{{ proto void gc_enable(void) + Activates the circular reference collector */ +ZEND_FUNCTION(gc_enable) +{ + zend_alter_ini_entry("zend.enable_gc", sizeof("zend.enable_gc"), "1", sizeof("1")-1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); +} +/* }}} */ + +/* {{{ proto void gc_disable(void) + Deactivates the circular reference collector */ +ZEND_FUNCTION(gc_disable) +{ + zend_alter_ini_entry("zend.enable_gc", sizeof("zend.enable_gc"), "0", sizeof("0")-1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); +} +/* }}} */ /* {{{ proto int func_num_args(void) Get the number of arguments that were passed to the function */ http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute.c?r1=1.716.2.12.2.24.2.15&r2=1.716.2.12.2.24.2.16&diff_format=u Index: ZendEngine2/zend_execute.c diff -u ZendEngine2/zend_execute.c:1.716.2.12.2.24.2.15 ZendEngine2/zend_execute.c:1.716.2.12.2.24.2.16 --- ZendEngine2/zend_execute.c:1.716.2.12.2.24.2.15 Mon Jan 21 19:39:55 2008 +++ ZendEngine2/zend_execute.c Tue Jan 22 09:27:47 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute.c,v 1.716.2.12.2.24.2.15 2008/01/21 19:39:55 dmitry Exp $ */ +/* $Id: zend_execute.c,v 1.716.2.12.2.24.2.16 2008/01/22 09:27:47 dmitry Exp $ */ #define ZEND_INTENSIVE_DEBUGGING 0 @@ -64,7 +64,7 @@ #define TEMP_VAR_STACK_LIMIT 2000 -static inline void zend_pzval_unlock_func(zval *z, zend_free_op *should_free, int unref) +static inline void zend_pzval_unlock_func(zval *z, zend_free_op *should_free, int unref TSRMLS_DC) { if (!Z_DELREF_P(z)) { Z_SET_REFCOUNT_P(z, 1); @@ -76,19 +76,21 @@ if (unref && Z_ISREF_P(z) && Z_REFCOUNT_P(z) == 1) { Z_UNSET_ISREF_P(z); } + GC_ZVAL_CHECK_POSSIBLE_ROOT(z); } } static inline void zend_pzval_unlock_free_func(zval *z) { if (!Z_DELREF_P(z)) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); safe_free_zval_ptr(z); } } -#define PZVAL_UNLOCK(z, f) zend_pzval_unlock_func(z, f, 1) -#define PZVAL_UNLOCK_EX(z, f, u) zend_pzval_unlock_func(z, f, u) +#define PZVAL_UNLOCK(z, f) zend_pzval_unlock_func(z, f, 1 TSRMLS_CC) +#define PZVAL_UNLOCK_EX(z, f, u) zend_pzval_unlock_func(z, f, u TSRMLS_CC) #define PZVAL_UNLOCK_FREE(z) zend_pzval_unlock_free_func(z) #define PZVAL_LOCK(z) Z_ADDREF_P((z)) #define RETURN_VALUE_UNUSED(pzn) (((pzn)->u.EA.type & EXT_TYPE_UNUSED)) @@ -777,6 +779,7 @@ } else { Z_ADDREF_P(value); *variable_ptr_ptr = value; + GC_REMOVE_ZVAL_FROM_BUFFER(variable_ptr); zendi_zval_dtor(*variable_ptr); safe_free_zval_ptr(variable_ptr); return value; http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute_API.c?r1=1.331.2.20.2.24.2.20&r2=1.331.2.20.2.24.2.21&diff_format=u Index: ZendEngine2/zend_execute_API.c diff -u ZendEngine2/zend_execute_API.c:1.331.2.20.2.24.2.20 ZendEngine2/zend_execute_API.c:1.331.2.20.2.24.2.21 --- ZendEngine2/zend_execute_API.c:1.331.2.20.2.24.2.20 Mon Jan 21 19:39:55 2008 +++ ZendEngine2/zend_execute_API.c Tue Jan 22 09:27:47 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute_API.c,v 1.331.2.20.2.24.2.20 2008/01/21 19:39:55 dmitry Exp $ */ +/* $Id: zend_execute_API.c,v 1.331.2.20.2.24.2.21 2008/01/22 09:27:47 dmitry Exp $ */ #include <stdio.h> #include <signal.h> @@ -418,17 +418,22 @@ #endif Z_DELREF_PP(zval_ptr); if (Z_REFCOUNT_PP(zval_ptr) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(*zval_ptr); zval_dtor(*zval_ptr); safe_free_zval_ptr_rel(*zval_ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC); - } else if (Z_REFCOUNT_PP(zval_ptr) == 1) { - if ((*zval_ptr)->type == IS_OBJECT) { - TSRMLS_FETCH(); + } else { + TSRMLS_FETCH(); - if (EG(ze1_compatibility_mode)) { - return; + if (Z_REFCOUNT_PP(zval_ptr) == 1) { + if ((*zval_ptr)->type == IS_OBJECT) { + if (EG(ze1_compatibility_mode)) { + return; + } } + Z_UNSET_ISREF_PP(zval_ptr); } - Z_UNSET_ISREF_PP(zval_ptr); + + GC_ZVAL_CHECK_POSSIBLE_ROOT(*zval_ptr); } } /* }}} */ http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_objects_API.c?r1=1.47.2.6.2.6.2.2&r2=1.47.2.6.2.6.2.3&diff_format=u Index: ZendEngine2/zend_objects_API.c diff -u ZendEngine2/zend_objects_API.c:1.47.2.6.2.6.2.2 ZendEngine2/zend_objects_API.c:1.47.2.6.2.6.2.3 --- ZendEngine2/zend_objects_API.c:1.47.2.6.2.6.2.2 Mon Dec 31 07:17:04 2007 +++ ZendEngine2/zend_objects_API.c Tue Jan 22 09:27:47 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects_API.c,v 1.47.2.6.2.6.2.2 2007/12/31 07:17:04 sebastian Exp $ */ +/* $Id: zend_objects_API.c,v 1.47.2.6.2.6.2.3 2008/01/22 09:27:47 dmitry Exp $ */ #include "zend.h" #include "zend_globals.h" @@ -84,6 +84,8 @@ if (objects->object_buckets[i].valid) { struct _store_object *obj = &objects->object_buckets[i].bucket.obj; + GC_REMOVE_ZOBJ_FROM_BUFFER(obj); + objects->object_buckets[i].valid = 0; if (obj->free_storage) { obj->free_storage(obj->object TSRMLS_CC); @@ -116,6 +118,7 @@ EG(objects_store).object_buckets[handle].valid = 1; obj->refcount = 1; + GC_OBJ_INIT(obj); obj->object = object; obj->dtor = dtor?dtor:(zend_objects_store_dtor_t)zend_objects_destroy_object; obj->free_storage = free_storage; @@ -167,6 +170,8 @@ Z_ADDREF_P(zobject); zend_objects_store_del_ref_by_handle(handle TSRMLS_CC); Z_DELREF_P(zobject); + + GC_ZOBJ_CHECK_POSSIBLE_ROOT(zobject); } /* @@ -201,6 +206,7 @@ } } if (obj->refcount == 1) { + GC_REMOVE_ZOBJ_FROM_BUFFER(obj); if (obj->free_storage) { zend_try { obj->free_storage(obj->object TSRMLS_CC); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_objects_API.h?r1=1.20.2.1.2.4.2.1&r2=1.20.2.1.2.4.2.2&diff_format=u Index: ZendEngine2/zend_objects_API.h diff -u ZendEngine2/zend_objects_API.h:1.20.2.1.2.4.2.1 ZendEngine2/zend_objects_API.h:1.20.2.1.2.4.2.2 --- ZendEngine2/zend_objects_API.h:1.20.2.1.2.4.2.1 Mon Dec 31 07:17:04 2007 +++ ZendEngine2/zend_objects_API.h Tue Jan 22 09:27:47 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_objects_API.h,v 1.20.2.1.2.4.2.1 2007/12/31 07:17:04 sebastian Exp $ */ +/* $Id: zend_objects_API.h,v 1.20.2.1.2.4.2.2 2008/01/22 09:27:47 dmitry Exp $ */ #ifndef ZEND_OBJECTS_API_H #define ZEND_OBJECTS_API_H @@ -38,6 +38,7 @@ zend_objects_free_object_storage_t free_storage; zend_objects_store_clone_t clone; zend_uint refcount; + gc_root_buffer *buffered; } obj; struct { int next; http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_operators.c?r1=1.208.2.4.2.23.2.7&r2=1.208.2.4.2.23.2.8&diff_format=u Index: ZendEngine2/zend_operators.c diff -u ZendEngine2/zend_operators.c:1.208.2.4.2.23.2.7 ZendEngine2/zend_operators.c:1.208.2.4.2.23.2.8 --- ZendEngine2/zend_operators.c:1.208.2.4.2.23.2.7 Mon Jan 21 19:10:25 2008 +++ ZendEngine2/zend_operators.c Tue Jan 22 09:27:47 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_operators.c,v 1.208.2.4.2.23.2.7 2008/01/21 19:10:25 dmitry Exp $ */ +/* $Id: zend_operators.c,v 1.208.2.4.2.23.2.8 2008/01/22 09:27:47 dmitry Exp $ */ #include <ctype.h> @@ -1352,6 +1352,7 @@ static inline void zend_free_obj_get_result(zval *op) { if (Z_REFCOUNT_P(op) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(op); zval_dtor(op); FREE_ZVAL(op); } else { http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.59.2.29.2.48.2.28&r2=1.59.2.29.2.48.2.29&diff_format=u Index: ZendEngine2/zend_vm_def.h diff -u ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.28 ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.29 --- ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.28 Mon Jan 21 14:22:58 2008 +++ ZendEngine2/zend_vm_def.h Tue Jan 22 09:27:47 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.28 2008/01/21 14:22:58 dmitry Exp $ */ +/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.29 2008/01/22 09:27:47 dmitry Exp $ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: @@ -350,6 +350,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -588,6 +589,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -678,6 +680,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -1227,6 +1230,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.62.2.30.2.49.2.29&r2=1.62.2.30.2.49.2.30&diff_format=u Index: ZendEngine2/zend_vm_execute.h diff -u ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.29 ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.30 --- ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.29 Mon Jan 21 14:22:59 2008 +++ ZendEngine2/zend_vm_execute.h Tue Jan 22 09:27:47 2008 @@ -8850,6 +8850,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -9087,6 +9088,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -9177,6 +9179,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -9407,6 +9410,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -10589,6 +10593,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -10827,6 +10832,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -10917,6 +10923,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -11147,6 +11154,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -12260,6 +12268,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -12498,6 +12507,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -12588,6 +12598,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -12818,6 +12829,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -13734,6 +13746,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -14537,6 +14550,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -14774,6 +14788,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -14864,6 +14879,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -15094,6 +15110,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -16087,6 +16104,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -16323,6 +16341,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -16413,6 +16432,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -16492,6 +16512,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -17153,6 +17174,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -17390,6 +17412,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -17480,6 +17503,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -17559,6 +17583,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -18149,6 +18174,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -18386,6 +18412,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -18476,6 +18503,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -18555,6 +18583,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -19145,6 +19174,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -19412,6 +19442,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -19648,6 +19679,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -19738,6 +19770,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -19817,6 +19850,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -21887,6 +21921,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -22123,6 +22158,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -22213,6 +22249,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -22442,6 +22479,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -23453,6 +23491,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -23690,6 +23729,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -23780,6 +23820,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -24009,6 +24050,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -25023,6 +25065,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -25260,6 +25303,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -25350,6 +25394,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -25579,6 +25624,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } @@ -26395,6 +26441,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -27107,6 +27154,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -27343,6 +27391,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -27433,6 +27482,7 @@ zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); zval_dtor(z); FREE_ZVAL(z); } @@ -27662,6 +27712,7 @@ if (RETURN_VALUE_UNUSED(&opline->result)) { if (Z_REFCOUNT_P(retval) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(retval); zval_dtor(retval); FREE_ZVAL(retval); } http://cvs.php.net/viewvc.cgi/php-src/main/main.c?r1=1.640.2.23.2.57.2.6&r2=1.640.2.23.2.57.2.7&diff_format=u Index: php-src/main/main.c diff -u php-src/main/main.c:1.640.2.23.2.57.2.6 php-src/main/main.c:1.640.2.23.2.57.2.7 --- php-src/main/main.c:1.640.2.23.2.57.2.6 Mon Dec 31 07:17:17 2007 +++ php-src/main/main.c Tue Jan 22 09:27:48 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: main.c,v 1.640.2.23.2.57.2.6 2007/12/31 07:17:17 sebastian Exp $ */ +/* $Id: main.c,v 1.640.2.23.2.57.2.7 2008/01/22 09:27:48 dmitry Exp $ */ /* {{{ includes */ @@ -1703,6 +1703,8 @@ ts_allocate_id(&php_win32_core_globals_id, sizeof(php_win32_core_globals), (ts_allocate_ctor) php_win32_core_globals_ctor, (ts_allocate_dtor) php_win32_core_globals_dtor); #endif #endif + gc_globals_ctor(TSRMLS_C); + EG(bailout) = NULL; EG(error_reporting) = E_ALL & ~E_NOTICE; @@ -1904,6 +1906,7 @@ zend_ini_shutdown(TSRMLS_C); shutdown_memory_manager(CG(unclean_shutdown), 1 TSRMLS_CC); core_globals_dtor(&core_globals TSRMLS_CC); + gc_globals_dtor(TSRMLS_C); #else zend_ini_global_shutdown(TSRMLS_C); ts_free_id(core_globals_id); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_gc.c?view=markup&rev=1.1 Index: ZendEngine2/zend_gc.c +++ ZendEngine2/zend_gc.c http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_gc.h?view=markup&rev=1.1 Index: ZendEngine2/zend_gc.h +++ ZendEngine2/zend_gc.h http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_001.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_001.phpt +++ ZendEngine2/tests/gc_001.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_002.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_002.phpt +++ ZendEngine2/tests/gc_002.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_003.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_003.phpt +++ ZendEngine2/tests/gc_003.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_004.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_004.phpt +++ ZendEngine2/tests/gc_004.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_005.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_005.phpt +++ ZendEngine2/tests/gc_005.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_006.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_006.phpt +++ ZendEngine2/tests/gc_006.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_007.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_007.phpt +++ ZendEngine2/tests/gc_007.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_008.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_008.phpt +++ ZendEngine2/tests/gc_008.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_009.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_009.phpt +++ ZendEngine2/tests/gc_009.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_010.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_010.phpt +++ ZendEngine2/tests/gc_010.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_011.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_011.phpt +++ ZendEngine2/tests/gc_011.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_012.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_012.phpt +++ ZendEngine2/tests/gc_012.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_013.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_013.phpt +++ ZendEngine2/tests/gc_013.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_014.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_014.phpt +++ ZendEngine2/tests/gc_014.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_015.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_015.phpt +++ ZendEngine2/tests/gc_015.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_016.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_016.phpt +++ ZendEngine2/tests/gc_016.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_017.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_017.phpt +++ ZendEngine2/tests/gc_017.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_018.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_018.phpt +++ ZendEngine2/tests/gc_018.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_019.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_019.phpt +++ ZendEngine2/tests/gc_019.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_020.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_020.phpt +++ ZendEngine2/tests/gc_020.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_021.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_021.phpt +++ ZendEngine2/tests/gc_021.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_022.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_022.phpt +++ ZendEngine2/tests/gc_022.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_023.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_023.phpt +++ ZendEngine2/tests/gc_023.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_024.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_024.phpt +++ ZendEngine2/tests/gc_024.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_025.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_025.phpt +++ ZendEngine2/tests/gc_025.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_026.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/gc_026.phpt +++ ZendEngine2/tests/gc_026.phpt
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php