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