summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_execute_locks.h40
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); }