@@ -162,16 +162,14 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object) /* {{{ *
162
162
otherwise, when the destructor ends the storage might be freed
163
163
when the refcount reaches 0 a second time
164
164
*/
165
- ZEND_ASSERT (EG (objects_store ).object_buckets != NULL );
166
- ZEND_ASSERT (IS_OBJ_VALID (EG (objects_store ).object_buckets [object -> handle ]));
167
165
ZEND_ASSERT (GC_REFCOUNT (object ) == 0 );
168
166
169
167
if (!(OBJ_FLAGS (object ) & IS_OBJ_DESTRUCTOR_CALLED )) {
170
168
GC_ADD_FLAGS (object , IS_OBJ_DESTRUCTOR_CALLED );
171
169
172
170
if (object -> handlers -> dtor_obj != zend_objects_destroy_object
173
171
|| object -> ce -> destructor ) {
174
- GC_ADDREF (object );
172
+ GC_SET_REFCOUNT (object , 1 );
175
173
object -> handlers -> dtor_obj (object );
176
174
GC_DELREF (object );
177
175
}
@@ -181,12 +179,13 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object) /* {{{ *
181
179
uint32_t handle = object -> handle ;
182
180
void * ptr ;
183
181
182
+ ZEND_ASSERT (EG (objects_store ).object_buckets != NULL );
183
+ ZEND_ASSERT (IS_OBJ_VALID (EG (objects_store ).object_buckets [handle ]));
184
184
EG (objects_store ).object_buckets [handle ] = SET_OBJ_INVALID (object );
185
185
if (!(OBJ_FLAGS (object ) & IS_OBJ_FREE_CALLED )) {
186
186
GC_ADD_FLAGS (object , IS_OBJ_FREE_CALLED );
187
- GC_ADDREF (object );
187
+ GC_SET_REFCOUNT (object , 1 );
188
188
object -> handlers -> free_obj (object );
189
- GC_DELREF (object );
190
189
}
191
190
ptr = ((char * )object ) - object -> handlers -> offset ;
192
191
GC_REMOVE_FROM_BUFFER (object );
0 commit comments