helly Wed Aug 20 20:10:50 2003 EDT Modified files: /spl spl_array.c spl_directory.c spl_engine.c spl_engine.h spl_foreach.c Log: Extensions that do opcode hooking must provide the removed functions/macros themselves now. Index: spl/spl_array.c diff -u spl/spl_array.c:1.18 spl/spl_array.c:1.19 --- spl/spl_array.c:1.18 Sat Aug 9 15:24:11 2003 +++ spl/spl_array.c Wed Aug 20 20:10:49 2003 @@ -24,7 +24,6 @@ #include "php_ini.h" #include "ext/standard/info.h" #include "zend_compile.h" -#include "zend_execute_locks.h" #include "php_spl.h" #include "spl_functions.h" @@ -101,7 +100,7 @@ if (!spl_fetch_dimension_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC)) { if (EX(opline)->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(EX(opline)->op1.u.var).var.ptr_ptr); + spl_pzval_lock_func(*EX_T(EX(opline)->op1.u.var).var.ptr_ptr); } spl_unlock_zval_ptr_ptr(&EX(opline)->op1, EX(Ts) TSRMLS_CC); Index: spl/spl_directory.c diff -u spl/spl_directory.c:1.6 spl/spl_directory.c:1.7 --- spl/spl_directory.c:1.6 Sun Aug 10 11:05:14 2003 +++ spl/spl_directory.c Wed Aug 20 20:10:49 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_directory.c,v 1.6 2003/08/10 15:05:14 helly Exp $ */ +/* $Id: spl_directory.c,v 1.7 2003/08/21 00:10:49 helly Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -26,7 +26,6 @@ #include "php_ini.h" #include "ext/standard/info.h" #include "zend_compile.h" -#include "zend_execute_locks.h" #include "zend_default_classes.h" #include "php_spl.h" Index: spl/spl_engine.c diff -u spl/spl_engine.c:1.15 spl/spl_engine.c:1.16 --- spl/spl_engine.c:1.15 Sat Aug 16 16:27:29 2003 +++ spl/spl_engine.c Wed Aug 20 20:10:49 2003 @@ -24,7 +24,6 @@ #include "php_ini.h" #include "ext/standard/info.h" #include "zend_compile.h" -#include "zend_execute_locks.h" #include "php_spl.h" #include "spl_functions.h" @@ -72,9 +71,9 @@ { if (node->op_type==IS_VAR) { if (T(node->u.var).var.ptr_ptr) { - PZVAL_UNLOCK(*T(node->u.var).var.ptr_ptr); + spl_pzval_unlock_func(*T(node->u.var).var.ptr_ptr TSRMLS_CC); } else if (T(node->u.var).EA.type==IS_STRING_OFFSET) { - PZVAL_UNLOCK(T(node->u.var).EA.data.str_offset.str); + spl_pzval_unlock_func(T(node->u.var).EA.data.str_offset.str TSRMLS_CC); } } } @@ -93,7 +92,7 @@ break; case IS_VAR: if (T(node->u.var).var.ptr) { - PZVAL_UNLOCK(T(node->u.var).var.ptr); + spl_pzval_unlock_func(T(node->u.var).var.ptr TSRMLS_CC); *should_free = 0; return T(node->u.var).var.ptr; } else { @@ -116,7 +115,7 @@ T->tmp_var.value.str.val = estrndup(&c, 1); T->tmp_var.value.str.len = 1; } - PZVAL_UNLOCK(str); + spl_pzval_unlock_func(str TSRMLS_CC); T->tmp_var.refcount=1; T->tmp_var.is_ref=1; T->tmp_var.type = IS_STRING; Index: spl/spl_engine.h diff -u spl/spl_engine.h:1.12 spl/spl_engine.h:1.13 --- spl/spl_engine.h:1.12 Sat Aug 16 16:27:29 2003 +++ spl/spl_engine.h Wed Aug 20 20:10:49 2003 @@ -23,7 +23,6 @@ #include "php_spl.h" #include "zend_compile.h" -#include "zend_execute_locks.h" #undef EX #define EX(element) execute_data->element @@ -75,6 +74,26 @@ } spl_is_a; spl_is_a spl_implements(zend_class_entry *ce); + +/* Use this only insode OPCODE-Hooks */ +static inline void spl_pzval_unlock_func(zval *z TSRMLS_DC) +{ + z->refcount--; + if (!z->refcount) { + z->refcount = 1; + z->is_ref = 0; + EG(garbage)[EG(garbage_ptr)++] = z; + } +} + +/* Use this only insode OPCODE-Hooks */ +static inline void spl_pzval_lock_func(zval *z) +{ + z->refcount++; +} + +/* Use this only insode OPCODE-Hooks */ +#define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!((pzn)->u.EA.type & EXT_TYPE_UNUSED)) { spl_pzval_lock_func(pzv); } #endif /* SPL_ENGINE_H */ Index: spl/spl_foreach.c diff -u spl/spl_foreach.c:1.19 spl/spl_foreach.c:1.20 --- spl/spl_foreach.c:1.19 Sat Aug 16 16:27:29 2003 +++ spl/spl_foreach.c Wed Aug 20 20:10:49 2003 @@ -24,7 +24,6 @@ #include "php_ini.h" #include "ext/standard/info.h" #include "zend_compile.h" -#include "zend_execute_locks.h" #include "php_spl.h" #include "spl_functions.h" @@ -77,7 +76,7 @@ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Objects created by %s::new_iterator() must implement spl_forward", obj_ce->name); ZEND_EXECUTE_HOOK_ORIGINAL(ZEND_FE_RESET); } - PZVAL_LOCK(retval); + spl_pzval_lock_func(retval); } else if (is_a & SPL_IS_A_FORWARD) { spl_unlock_zval_ptr_ptr(&EX(opline)->op1, EX(Ts) TSRMLS_CC); retval = *obj; @@ -252,7 +251,7 @@ FREE_ZVAL(tmp); spl_unlock_zval_ptr_ptr(&EX(opline)->op1, EX(Ts) TSRMLS_CC); - PZVAL_LOCK(*obj); + spl_pzval_lock_func(*obj); SET_UNUSED(*op2); }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php