Skip to content

Commit 8857af8

Browse files
committed
Use inline finction for OBJ_RELEASE() macro
1 parent d1cfc0b commit 8857af8

File tree

3 files changed

+12
-18
lines changed

3 files changed

+12
-18
lines changed

Zend/zend_objects_API.h

+10-8
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,7 @@
3737
} while (0)
3838

3939

40-
#define OBJ_RELEASE(obj) do { \
41-
zend_object *_obj = (obj); \
42-
if (--GC_REFCOUNT(_obj) == 0) { \
43-
zend_objects_store_del(_obj TSRMLS_CC); \
44-
} else { \
45-
gc_possible_root(&_obj->gc TSRMLS_CC); \
46-
} \
47-
} while (0)
40+
#define OBJ_RELEASE(obj) zend_object_release(obj TSRMLS_CC)
4841

4942
typedef struct _zend_objects_store {
5043
zend_object **object_buckets;
@@ -78,6 +71,15 @@ ZEND_API zend_object *zend_object_create_proxy(zval *object, zval *member TSRMLS
7871
ZEND_API zend_object_handlers *zend_get_std_object_handlers(void);
7972
END_EXTERN_C()
8073

74+
static zend_always_inline void zend_object_release(zend_object *obj TSRMLS_CC)
75+
{
76+
if (--GC_REFCOUNT(obj) == 0) {
77+
zend_objects_store_del(obj TSRMLS_CC);
78+
} else if (UNEXPECTED(!GC_INFO(obj))) {
79+
gc_possible_root(&obj->gc TSRMLS_CC);
80+
}
81+
}
82+
8183
#endif /* ZEND_OBJECTS_H */
8284

8385
/*

Zend/zend_vm_def.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -2710,11 +2710,7 @@ ZEND_VM_C_LABEL(fcall_end_change_scope):
27102710
zend_object_store_ctor_failed(Z_OBJ(EG(This)) TSRMLS_CC);
27112711
}
27122712
}
2713-
if (!Z_DELREF(EG(This))) {
2714-
_zval_dtor_func_for_ptr(Z_COUNTED(EG(This)) ZEND_FILE_LINE_CC);
2715-
} else if (UNEXPECTED(!Z_GC_INFO(EG(This)))) {
2716-
gc_possible_root(Z_COUNTED(EG(This)) TSRMLS_CC);
2717-
}
2713+
OBJ_RELEASE(Z_OBJ(EG(This)));
27182714
}
27192715
Z_OBJ(EG(This)) = EX(object);
27202716
EG(scope) = EX(scope);

Zend/zend_vm_execute.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -671,11 +671,7 @@ static int ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
671671
zend_object_store_ctor_failed(Z_OBJ(EG(This)) TSRMLS_CC);
672672
}
673673
}
674-
if (!Z_DELREF(EG(This))) {
675-
_zval_dtor_func_for_ptr(Z_COUNTED(EG(This)) ZEND_FILE_LINE_CC);
676-
} else if (UNEXPECTED(!Z_GC_INFO(EG(This)))) {
677-
gc_possible_root(Z_COUNTED(EG(This)) TSRMLS_CC);
678-
}
674+
OBJ_RELEASE(Z_OBJ(EG(This)));
679675
}
680676
Z_OBJ(EG(This)) = EX(object);
681677
EG(scope) = EX(scope);

0 commit comments

Comments
 (0)