mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Use OBJ_FLAGS() macro to access object flags (even if they are currently stored together with GC_FLAGS)
This commit is contained in:
parent
6fb5568b2d
commit
b3e22da745
8 changed files with 29 additions and 27 deletions
|
@ -379,7 +379,7 @@ tail_call:
|
|||
zend_object_get_gc_t get_gc;
|
||||
zend_object *obj = (zend_object*)ref;
|
||||
|
||||
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
(get_gc = obj->handlers->get_gc) != NULL)) {
|
||||
int n;
|
||||
zval *zv, *end;
|
||||
|
@ -489,7 +489,7 @@ tail_call:
|
|||
zend_object_get_gc_t get_gc;
|
||||
zend_object *obj = (zend_object*)ref;
|
||||
|
||||
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
(get_gc = obj->handlers->get_gc) != NULL)) {
|
||||
int n;
|
||||
zval *zv, *end;
|
||||
|
@ -602,7 +602,7 @@ tail_call:
|
|||
zend_object_get_gc_t get_gc;
|
||||
zend_object *obj = (zend_object*)ref;
|
||||
|
||||
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
(get_gc = obj->handlers->get_gc) != NULL)) {
|
||||
int n;
|
||||
zval *zv, *end;
|
||||
|
@ -764,7 +764,7 @@ tail_call:
|
|||
zend_object_get_gc_t get_gc;
|
||||
zend_object *obj = (zend_object*)ref;
|
||||
|
||||
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
(get_gc = obj->handlers->get_gc) != NULL)) {
|
||||
int n;
|
||||
zval *zv, *end;
|
||||
|
@ -956,7 +956,7 @@ tail_call:
|
|||
zend_object_get_gc_t get_gc;
|
||||
zend_object *obj = (zend_object*)ref;
|
||||
|
||||
if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
|
||||
(get_gc = obj->handlers->get_gc) != NULL)) {
|
||||
int n;
|
||||
zval *zv, *end;
|
||||
|
@ -1112,9 +1112,9 @@ ZEND_API int zend_gc_collect_cycles(void)
|
|||
if (GC_TYPE(p) == IS_OBJECT) {
|
||||
zend_object *obj = (zend_object*)p;
|
||||
|
||||
if (!(GC_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
|
||||
if (!(OBJ_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
|
||||
GC_TRACE_REF(obj, "calling destructor");
|
||||
GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
OBJ_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
if (obj->handlers->dtor_obj
|
||||
&& (obj->handlers->dtor_obj != zend_objects_destroy_object
|
||||
|| obj->ce->destructor)) {
|
||||
|
@ -1151,8 +1151,8 @@ ZEND_API int zend_gc_collect_cycles(void)
|
|||
|
||||
EG(objects_store).object_buckets[obj->handle] = SET_OBJ_INVALID(obj);
|
||||
GC_TYPE(obj) = IS_NULL;
|
||||
if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
|
||||
GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
|
||||
if (!(OBJ_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
|
||||
OBJ_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
|
||||
if (obj->handlers->free_obj) {
|
||||
GC_ADDREF(obj);
|
||||
obj->handlers->free_obj(obj);
|
||||
|
|
|
@ -495,7 +495,7 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe
|
|||
zval *zv;
|
||||
uint32_t *ptr;
|
||||
|
||||
ZEND_ASSERT(GC_FLAGS(zobj) & IS_OBJ_USE_GUARDS);
|
||||
ZEND_ASSERT(OBJ_FLAGS(zobj) & IS_OBJ_USE_GUARDS);
|
||||
zv = zobj->properties_table + zobj->ce->default_properties_count;
|
||||
if (EXPECTED(Z_TYPE_P(zv) == IS_STRING)) {
|
||||
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
|
|||
}
|
||||
} else {
|
||||
ZEND_ASSERT(Z_TYPE_P(zv) == IS_UNDEF);
|
||||
GC_FLAGS(zobj) |= IS_OBJ_HAS_GUARDS;
|
||||
OBJ_FLAGS(zobj) |= IS_OBJ_HAS_GUARDS;
|
||||
ZVAL_STR_COPY(zv, member);
|
||||
zv->u2.property_guard = 0;
|
||||
return &zv->u2.property_guard;
|
||||
|
|
|
@ -35,7 +35,7 @@ ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class
|
|||
object->properties = NULL;
|
||||
zend_objects_store_put(object);
|
||||
if (UNEXPECTED(ce->ce_flags & ZEND_ACC_USE_GUARDS)) {
|
||||
GC_FLAGS(object) |= IS_OBJ_USE_GUARDS;
|
||||
OBJ_FLAGS(object) |= IS_OBJ_USE_GUARDS;
|
||||
ZVAL_UNDEF(object->properties_table + object->ce->default_properties_count);
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ ZEND_API void zend_object_std_dtor(zend_object *object)
|
|||
p++;
|
||||
} while (p != end);
|
||||
}
|
||||
if (UNEXPECTED(GC_FLAGS(object) & IS_OBJ_HAS_GUARDS)) {
|
||||
if (UNEXPECTED(OBJ_FLAGS(object) & IS_OBJ_HAS_GUARDS)) {
|
||||
if (EXPECTED(Z_TYPE_P(p) == IS_STRING)) {
|
||||
zend_string_release(Z_STR_P(p));
|
||||
} else {
|
||||
|
|
|
@ -48,8 +48,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_call_destructors(zend_objects_sto
|
|||
for (i = 1; i < objects->top; i++) {
|
||||
zend_object *obj = objects->object_buckets[i];
|
||||
if (IS_OBJ_VALID(obj)) {
|
||||
if (!(GC_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
|
||||
GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
if (!(OBJ_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
|
||||
OBJ_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
|
||||
if (obj->handlers->dtor_obj
|
||||
&& (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
|
|||
zend_object *obj = *obj_ptr;
|
||||
|
||||
if (IS_OBJ_VALID(obj)) {
|
||||
GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
OBJ_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
}
|
||||
obj_ptr++;
|
||||
} while (obj_ptr != end);
|
||||
|
@ -98,8 +98,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_
|
|||
obj_ptr--;
|
||||
obj = *obj_ptr;
|
||||
if (IS_OBJ_VALID(obj)) {
|
||||
if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
|
||||
GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
|
||||
if (!(OBJ_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
|
||||
OBJ_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
|
||||
if (obj->handlers->free_obj && obj->handlers->free_obj != zend_object_std_dtor) {
|
||||
GC_ADDREF(obj);
|
||||
obj->handlers->free_obj(obj);
|
||||
|
@ -113,8 +113,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_
|
|||
obj_ptr--;
|
||||
obj = *obj_ptr;
|
||||
if (IS_OBJ_VALID(obj)) {
|
||||
if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
|
||||
GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
|
||||
if (!(OBJ_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
|
||||
OBJ_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
|
||||
if (obj->handlers->free_obj) {
|
||||
GC_ADDREF(obj);
|
||||
obj->handlers->free_obj(obj);
|
||||
|
@ -164,8 +164,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object) /* {{{ *
|
|||
ZEND_ASSERT(IS_OBJ_VALID(EG(objects_store).object_buckets[object->handle]));
|
||||
ZEND_ASSERT(GC_REFCOUNT(object) == 0);
|
||||
|
||||
if (!(GC_FLAGS(object) & IS_OBJ_DESTRUCTOR_CALLED)) {
|
||||
GC_FLAGS(object) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
if (!(OBJ_FLAGS(object) & IS_OBJ_DESTRUCTOR_CALLED)) {
|
||||
OBJ_FLAGS(object) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
|
||||
if (object->handlers->dtor_obj
|
||||
&& (object->handlers->dtor_obj != zend_objects_destroy_object
|
||||
|
@ -181,8 +181,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object) /* {{{ *
|
|||
void *ptr;
|
||||
|
||||
EG(objects_store).object_buckets[handle] = SET_OBJ_INVALID(object);
|
||||
if (!(GC_FLAGS(object) & IS_OBJ_FREE_CALLED)) {
|
||||
GC_FLAGS(object) |= IS_OBJ_FREE_CALLED;
|
||||
if (!(OBJ_FLAGS(object) & IS_OBJ_FREE_CALLED)) {
|
||||
OBJ_FLAGS(object) |= IS_OBJ_FREE_CALLED;
|
||||
if (object->handlers->free_obj) {
|
||||
GC_ADDREF(object);
|
||||
object->handlers->free_obj(object);
|
||||
|
|
|
@ -62,7 +62,7 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object);
|
|||
/* Called when the ctor was terminated by an exception */
|
||||
static zend_always_inline void zend_object_store_ctor_failed(zend_object *obj)
|
||||
{
|
||||
GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
OBJ_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
|
||||
}
|
||||
|
||||
#define ZEND_OBJECTS_STORE_HANDLERS 0, zend_object_std_dtor, zend_objects_destroy_object, zend_objects_clone_obj
|
||||
|
|
|
@ -498,6 +498,8 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
|
|||
#define IS_OBJ_USE_GUARDS (1<<6)
|
||||
#define IS_OBJ_HAS_GUARDS (1<<7)
|
||||
|
||||
#define OBJ_FLAGS(obj) GC_FLAGS(obj)
|
||||
|
||||
/* Recursion protection macros must be used only for arrays and objects */
|
||||
#define GC_IS_RECURSIVE(p) \
|
||||
(GC_FLAGS(p) & GC_PROTECTED)
|
||||
|
|
|
@ -90,7 +90,7 @@ static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt) /* {{{ */
|
|||
|
||||
if (!Z_ISUNDEF(stmt->database_object_handle)
|
||||
&& IS_OBJ_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE(stmt->database_object_handle)])
|
||||
&& (!(GC_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED))) {
|
||||
&& (!(OBJ_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED))) {
|
||||
while (mysql_more_results(S->H->server)) {
|
||||
MYSQL_RES *res;
|
||||
if (mysql_next_result(S->H->server) != 0) {
|
||||
|
|
|
@ -63,7 +63,7 @@ static int pgsql_stmt_dtor(pdo_stmt_t *stmt)
|
|||
pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
|
||||
zend_bool server_obj_usable = !Z_ISUNDEF(stmt->database_object_handle)
|
||||
&& IS_OBJ_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE(stmt->database_object_handle)])
|
||||
&& !(GC_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED);
|
||||
&& !(OBJ_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED);
|
||||
|
||||
if (S->result) {
|
||||
/* free the resource */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue