Browse Source

Extensions that do opcode hooking must provide the removed functions/macros

themselves now.
PEAR_1_4DEV
Marcus Boerger 23 years ago
parent
commit
1cf91a7ac5
  1. 3
      ext/spl/spl_array.c
  2. 1
      ext/spl/spl_directory.c
  3. 9
      ext/spl/spl_engine.c
  4. 21
      ext/spl/spl_engine.h
  5. 5
      ext/spl/spl_foreach.c

3
ext/spl/spl_array.c

@ -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 @@ ZEND_EXECUTE_HOOK_FUNCTION(ZEND_FETCH_DIM_R)
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);

1
ext/spl/spl_directory.c

@ -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"

9
ext/spl/spl_engine.c

@ -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 @@ void spl_unlock_zval_ptr_ptr(znode *node, temp_variable *Ts TSRMLS_DC)
{
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 @@ zval * spl_get_zval_ptr(znode *node, temp_variable *Ts, zval **should_free TSRML
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 @@ zval * spl_get_zval_ptr(znode *node, temp_variable *Ts, zval **should_free TSRML
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;

21
ext/spl/spl_engine.h

@ -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
@ -76,6 +75,26 @@ typedef enum {
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 */
/*

5
ext/spl/spl_foreach.c

@ -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 @@ ZEND_EXECUTE_HOOK_FUNCTION(ZEND_FE_RESET)
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 @@ ZEND_EXECUTE_HOOK_FUNCTION(ZEND_SWITCH_FREE)
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);
}

Loading…
Cancel
Save