diff --git a/Zend/tests/fibers/gh19983.phpt b/Zend/tests/fibers/gh19983.phpt new file mode 100644 index 0000000000000..156edc3918151 --- /dev/null +++ b/Zend/tests/fibers/gh19983.phpt @@ -0,0 +1,29 @@ +--TEST-- +GH-19983 (GC Assertion Failure with fibers, generators and destructors) +--SKIPIF-- + +--INI-- +memory_limit=128M +--FILE-- +current(); + }); + $fiber->start(); + } +} +new a; +?> +--EXPECTF-- +Fatal error: Allowed memory size of %d bytes exhausted%s diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c index 7b2ff49a73632..ffd427eac5bc0 100644 --- a/Zend/zend_gc.c +++ b/Zend/zend_gc.c @@ -1893,13 +1893,15 @@ static zend_never_inline void gc_call_destructors_in_fiber(uint32_t end) GC_G(dtor_idx) = GC_FIRST_ROOT; GC_G(dtor_end) = GC_G(first_unused); + zend_object *exception = NULL; + remember_prev_exception(&exception); + if (UNEXPECTED(!fiber)) { fiber = gc_create_destructor_fiber(); } else { zend_fiber_resume(fiber, NULL, NULL); } - zend_object *exception = NULL; remember_prev_exception(&exception); for (;;) {