mirror of
https://github.com/php/php-src.git
synced 2026-04-13 19:14:16 +02:00
- Use inline instead of macro for PZVAL_LOCK()/PZVAL_UNLOCK() so that it
can be debugged.
This commit is contained in:
@@ -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); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user