#ifndef ZEND_EXECUTE_LOCKS_H #define ZEND_EXECUTE_LOCKS_H #define PZVAL_LOCK(z) zend_pzval_lock_func(z) static inline void zend_pzval_lock_func(zval *z) { z->refcount++; } #define PZVAL_UNLOCK(z) zend_pzval_unlock_func(z TSRMLS_CC) static inline void zend_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; } } static inline void zend_clean_garbage(TSRMLS_D) { while (EG(garbage_ptr)) { zval_ptr_dtor(&EG(garbage)[--EG(garbage_ptr)]); } } #define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!((pzn)->u.EA.type & EXT_TYPE_UNUSED)) { PZVAL_LOCK(pzv); } #endif /* ZEND_EXECUTE_LOCKS_H */