@@ -161,6 +161,20 @@ zend_lazy_object_flags_t zend_lazy_object_get_flags(zend_object *obj)
161161 return zend_lazy_object_get_info (obj )-> flags ;
162162}
163163
164+ /* Release the initializer while the info is still registered, so that
165+ * destructors triggered by this can not reset the object */
166+ static void zend_lazy_object_release_initializer (zend_object * obj )
167+ {
168+ zend_lazy_object_info * info = zend_hash_index_find_ptr (& EG (lazy_objects_store ).infos , obj -> handle );
169+ ZEND_ASSERT (info && !(info -> flags & ZEND_LAZY_OBJECT_INITIALIZED ));
170+
171+ zval initializer_zv ;
172+ ZVAL_COPY_VALUE (& initializer_zv , & info -> u .initializer .zv );
173+ ZVAL_UNDEF (& info -> u .initializer .zv );
174+ zend_fcc_dtor (& info -> u .initializer .fcc );
175+ zval_ptr_dtor (& initializer_zv );
176+ }
177+
164178void zend_lazy_object_del_info (zend_object * obj )
165179{
166180 zend_result res = zend_hash_index_del (& EG (lazy_objects_store ).infos , obj -> handle );
@@ -412,6 +426,7 @@ ZEND_API zend_object *zend_lazy_object_mark_as_initialized(zend_object *obj)
412426 }
413427 }
414428
429+ zend_lazy_object_release_initializer (obj );
415430 zend_lazy_object_del_info (obj );
416431
417432 return obj ;
@@ -672,14 +687,7 @@ ZEND_API zend_object *zend_lazy_object_init(zend_object *obj)
672687 zend_release_properties (properties_snapshot );
673688 }
674689
675- /* Release the initializer while the info is still registered, so that
676- * destructors triggered by this can not reset the object */
677- zend_lazy_object_info * info = zend_hash_index_find_ptr (& EG (lazy_objects_store ).infos , obj -> handle );
678- zval initializer_zv ;
679- ZVAL_COPY_VALUE (& initializer_zv , & info -> u .initializer .zv );
680- ZVAL_UNDEF (& info -> u .initializer .zv );
681- zend_fcc_dtor (& info -> u .initializer .fcc );
682- zval_ptr_dtor (& initializer_zv );
690+ zend_lazy_object_release_initializer (obj );
683691
684692 /* Must be very last in this function, for the
685693 * zend_lazy_object_has_stale_info() check */
0 commit comments