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