diff options
-rw-r--r-- | Zend/zend_execute_locks.h | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/Zend/zend_execute_locks.h b/Zend/zend_execute_locks.h index 0be06b0ac4..da389fb519 100644 --- a/Zend/zend_execute_locks.h +++ b/Zend/zend_execute_locks.h @@ -1,21 +1,31 @@ #ifndef ZEND_EXECUTE_LOCKS_H #define ZEND_EXECUTE_LOCKS_H -#define PZVAL_LOCK(z) ((z)->refcount++) -#define PZVAL_UNLOCK(z) { ((z)->refcount--); \ - if (!(z)->refcount) { \ - (z)->refcount = 1; \ - (z)->is_ref = 0; \ - if (EG(garbage_ptr) == 4) { \ - zval_ptr_dtor(&EG(garbage)[0]); \ - zval_ptr_dtor(&EG(garbage)[1]); \ - EG(garbage)[0] = EG(garbage)[2]; \ - EG(garbage)[1] = EG(garbage)[3]; \ - EG(garbage_ptr) -= 2; \ - } \ - EG(garbage)[EG(garbage_ptr)++] = (z); \ - } \ - } +#define PZVAL_LOCK(z) zend_pzval_lock_func(z) + +static inline zend_pzval_lock_func(zval *z) +{ + ((z)->refcount++); +} + +#define PZVAL_UNLOCK(z) zend_pzval_unlock_func(z ELS_CC) + +static inline zend_pzval_unlock_func(zval *z ELS_DC) +{ + ((z)->refcount--); + if (!(z)->refcount) { + (z)->refcount = 1; + (z)->is_ref = 0; + if (EG(garbage_ptr) == 4) { + zval_ptr_dtor(&EG(garbage)[0]); + zval_ptr_dtor(&EG(garbage)[1]); + EG(garbage)[0] = EG(garbage)[2]; + EG(garbage)[1] = EG(garbage)[3]; + EG(garbage_ptr) -= 2; + } + EG(garbage)[EG(garbage_ptr)++] = (z); + } +} #define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!((pzn)->u.EA.type & EXT_TYPE_UNUSED)) { PZVAL_LOCK(pzv); } |