mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Perform final GC before the object store is freed
free_object_storage intentionally does not free the object allocations to make sure that they show up as leaks. However, if the object is in the GC root buffer, the later GC run may end up freeing the allocation, hiding the leak. Avoid this by moving the final GC run before free_object_storage, the way it was done before fast_shutdown was integrated into core.
This commit is contained in:
parent
ba3bd4ae06
commit
178dcd4749
1 changed files with 10 additions and 8 deletions
|
@ -265,6 +265,16 @@ void shutdown_executor(void) /* {{{ */
|
|||
zend_close_rsrc_list(&EG(regular_list));
|
||||
} zend_end_try();
|
||||
|
||||
if (!fast_shutdown) {
|
||||
zend_hash_graceful_reverse_destroy(&EG(symbol_table));
|
||||
|
||||
#if ZEND_DEBUG
|
||||
if (gc_enabled() && !CG(unclean_shutdown)) {
|
||||
gc_collect_cycles();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
zend_objects_store_free_object_storage(&EG(objects_store), fast_shutdown);
|
||||
|
||||
/* All resources and objects are destroyed. */
|
||||
|
@ -286,14 +296,6 @@ void shutdown_executor(void) /* {{{ */
|
|||
zend_hash_discard(EG(class_table), EG(persistent_classes_count));
|
||||
zend_cleanup_internal_classes();
|
||||
} else {
|
||||
zend_hash_graceful_reverse_destroy(&EG(symbol_table));
|
||||
|
||||
#if ZEND_DEBUG
|
||||
if (gc_enabled() && !CG(unclean_shutdown)) {
|
||||
gc_collect_cycles();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* remove error handlers before destroying classes and functions,
|
||||
* so that if handler used some class, crash would not happen */
|
||||
if (Z_TYPE(EG(user_error_handler)) != IS_UNDEF) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue