Skip to content

Commit b3e22da

Browse files
committed
Use OBJ_FLAGS() macro to access object flags (even if they are currently stored together with GC_FLAGS)
1 parent 6fb5568 commit b3e22da

8 files changed

+29
-27
lines changed

Zend/zend_gc.c

+9-9
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ static void gc_scan_black(zend_refcounted *ref)
379379
zend_object_get_gc_t get_gc;
380380
zend_object *obj = (zend_object*)ref;
381381

382-
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
382+
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
383383
(get_gc = obj->handlers->get_gc) != NULL)) {
384384
int n;
385385
zval *zv, *end;
@@ -489,7 +489,7 @@ static void gc_mark_grey(zend_refcounted *ref)
489489
zend_object_get_gc_t get_gc;
490490
zend_object *obj = (zend_object*)ref;
491491

492-
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
492+
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
493493
(get_gc = obj->handlers->get_gc) != NULL)) {
494494
int n;
495495
zval *zv, *end;
@@ -602,7 +602,7 @@ static void gc_scan(zend_refcounted *ref)
602602
zend_object_get_gc_t get_gc;
603603
zend_object *obj = (zend_object*)ref;
604604

605-
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
605+
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
606606
(get_gc = obj->handlers->get_gc) != NULL)) {
607607
int n;
608608
zval *zv, *end;
@@ -764,7 +764,7 @@ static int gc_collect_white(zend_refcounted *ref, uint32_t *flags)
764764
zend_object_get_gc_t get_gc;
765765
zend_object *obj = (zend_object*)ref;
766766

767-
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
767+
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
768768
(get_gc = obj->handlers->get_gc) != NULL)) {
769769
int n;
770770
zval *zv, *end;
@@ -956,7 +956,7 @@ static void gc_remove_nested_data_from_buffer(zend_refcounted *ref, gc_root_buff
956956
zend_object_get_gc_t get_gc;
957957
zend_object *obj = (zend_object*)ref;
958958

959-
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
959+
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
960960
(get_gc = obj->handlers->get_gc) != NULL)) {
961961
int n;
962962
zval *zv, *end;
@@ -1112,9 +1112,9 @@ ZEND_API int zend_gc_collect_cycles(void)
11121112
if (GC_TYPE(p) == IS_OBJECT) {
11131113
zend_object *obj = (zend_object*)p;
11141114

1115-
if (!(GC_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
1115+
if (!(OBJ_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
11161116
GC_TRACE_REF(obj, "calling destructor");
1117-
GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
1117+
OBJ_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
11181118
if (obj->handlers->dtor_obj
11191119
&& (obj->handlers->dtor_obj != zend_objects_destroy_object
11201120
|| obj->ce->destructor)) {
@@ -1151,8 +1151,8 @@ ZEND_API int zend_gc_collect_cycles(void)
11511151

11521152
EG(objects_store).object_buckets[obj->handle] = SET_OBJ_INVALID(obj);
11531153
GC_TYPE(obj) = IS_NULL;
1154-
if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
1155-
GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
1154+
if (!(OBJ_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
1155+
OBJ_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
11561156
if (obj->handlers->free_obj) {
11571157
GC_ADDREF(obj);
11581158
obj->handlers->free_obj(obj);

Zend/zend_object_handlers.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe
495495
zval *zv;
496496
uint32_t *ptr;
497497

498-
ZEND_ASSERT(GC_FLAGS(zobj) & IS_OBJ_USE_GUARDS);
498+
ZEND_ASSERT(OBJ_FLAGS(zobj) & IS_OBJ_USE_GUARDS);
499499
zv = zobj->properties_table + zobj->ce->default_properties_count;
500500
if (EXPECTED(Z_TYPE_P(zv) == IS_STRING)) {
501501
zend_string *str = Z_STR_P(zv);
@@ -526,7 +526,7 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe
526526
}
527527
} else {
528528
ZEND_ASSERT(Z_TYPE_P(zv) == IS_UNDEF);
529-
GC_FLAGS(zobj) |= IS_OBJ_HAS_GUARDS;
529+
OBJ_FLAGS(zobj) |= IS_OBJ_HAS_GUARDS;
530530
ZVAL_STR_COPY(zv, member);
531531
zv->u2.property_guard = 0;
532532
return &zv->u2.property_guard;

Zend/zend_objects.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class
3535
object->properties = NULL;
3636
zend_objects_store_put(object);
3737
if (UNEXPECTED(ce->ce_flags & ZEND_ACC_USE_GUARDS)) {
38-
GC_FLAGS(object) |= IS_OBJ_USE_GUARDS;
38+
OBJ_FLAGS(object) |= IS_OBJ_USE_GUARDS;
3939
ZVAL_UNDEF(object->properties_table + object->ce->default_properties_count);
4040
}
4141
}
@@ -59,7 +59,7 @@ ZEND_API void zend_object_std_dtor(zend_object *object)
5959
p++;
6060
} while (p != end);
6161
}
62-
if (UNEXPECTED(GC_FLAGS(object) & IS_OBJ_HAS_GUARDS)) {
62+
if (UNEXPECTED(OBJ_FLAGS(object) & IS_OBJ_HAS_GUARDS)) {
6363
if (EXPECTED(Z_TYPE_P(p) == IS_STRING)) {
6464
zend_string_release(Z_STR_P(p));
6565
} else {

Zend/zend_objects_API.c

+11-11
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_call_destructors(zend_objects_sto
4848
for (i = 1; i < objects->top; i++) {
4949
zend_object *obj = objects->object_buckets[i];
5050
if (IS_OBJ_VALID(obj)) {
51-
if (!(GC_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
52-
GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
51+
if (!(OBJ_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
52+
OBJ_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
5353

5454
if (obj->handlers->dtor_obj
5555
&& (obj->handlers->dtor_obj != zend_objects_destroy_object
@@ -74,7 +74,7 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_mark_destructed(zend_objects_stor
7474
zend_object *obj = *obj_ptr;
7575

7676
if (IS_OBJ_VALID(obj)) {
77-
GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
77+
OBJ_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
7878
}
7979
obj_ptr++;
8080
} while (obj_ptr != end);
@@ -98,8 +98,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_
9898
obj_ptr--;
9999
obj = *obj_ptr;
100100
if (IS_OBJ_VALID(obj)) {
101-
if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
102-
GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
101+
if (!(OBJ_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
102+
OBJ_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
103103
if (obj->handlers->free_obj && obj->handlers->free_obj != zend_object_std_dtor) {
104104
GC_ADDREF(obj);
105105
obj->handlers->free_obj(obj);
@@ -113,8 +113,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_
113113
obj_ptr--;
114114
obj = *obj_ptr;
115115
if (IS_OBJ_VALID(obj)) {
116-
if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
117-
GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
116+
if (!(OBJ_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
117+
OBJ_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
118118
if (obj->handlers->free_obj) {
119119
GC_ADDREF(obj);
120120
obj->handlers->free_obj(obj);
@@ -164,8 +164,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object) /* {{{ *
164164
ZEND_ASSERT(IS_OBJ_VALID(EG(objects_store).object_buckets[object->handle]));
165165
ZEND_ASSERT(GC_REFCOUNT(object) == 0);
166166

167-
if (!(GC_FLAGS(object) & IS_OBJ_DESTRUCTOR_CALLED)) {
168-
GC_FLAGS(object) |= IS_OBJ_DESTRUCTOR_CALLED;
167+
if (!(OBJ_FLAGS(object) & IS_OBJ_DESTRUCTOR_CALLED)) {
168+
OBJ_FLAGS(object) |= IS_OBJ_DESTRUCTOR_CALLED;
169169

170170
if (object->handlers->dtor_obj
171171
&& (object->handlers->dtor_obj != zend_objects_destroy_object
@@ -181,8 +181,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object) /* {{{ *
181181
void *ptr;
182182

183183
EG(objects_store).object_buckets[handle] = SET_OBJ_INVALID(object);
184-
if (!(GC_FLAGS(object) & IS_OBJ_FREE_CALLED)) {
185-
GC_FLAGS(object) |= IS_OBJ_FREE_CALLED;
184+
if (!(OBJ_FLAGS(object) & IS_OBJ_FREE_CALLED)) {
185+
OBJ_FLAGS(object) |= IS_OBJ_FREE_CALLED;
186186
if (object->handlers->free_obj) {
187187
GC_ADDREF(object);
188188
object->handlers->free_obj(object);

Zend/zend_objects_API.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object);
6262
/* Called when the ctor was terminated by an exception */
6363
static zend_always_inline void zend_object_store_ctor_failed(zend_object *obj)
6464
{
65-
GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
65+
OBJ_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
6666
}
6767

6868
#define ZEND_OBJECTS_STORE_HANDLERS 0, zend_object_std_dtor, zend_objects_destroy_object, zend_objects_clone_obj

Zend/zend_types.h

+2
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,8 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
498498
#define IS_OBJ_USE_GUARDS (1<<6)
499499
#define IS_OBJ_HAS_GUARDS (1<<7)
500500

501+
#define OBJ_FLAGS(obj) GC_FLAGS(obj)
502+
501503
/* Recursion protection macros must be used only for arrays and objects */
502504
#define GC_IS_RECURSIVE(p) \
503505
(GC_FLAGS(p) & GC_PROTECTED)

ext/pdo_mysql/mysql_statement.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt) /* {{{ */
9090

9191
if (!Z_ISUNDEF(stmt->database_object_handle)
9292
&& IS_OBJ_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE(stmt->database_object_handle)])
93-
&& (!(GC_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED))) {
93+
&& (!(OBJ_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED))) {
9494
while (mysql_more_results(S->H->server)) {
9595
MYSQL_RES *res;
9696
if (mysql_next_result(S->H->server) != 0) {

ext/pdo_pgsql/pgsql_statement.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ static int pgsql_stmt_dtor(pdo_stmt_t *stmt)
6363
pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
6464
zend_bool server_obj_usable = !Z_ISUNDEF(stmt->database_object_handle)
6565
&& IS_OBJ_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE(stmt->database_object_handle)])
66-
&& !(GC_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED);
66+
&& !(OBJ_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED);
6767

6868
if (S->result) {
6969
/* free the resource */

0 commit comments

Comments
 (0)