Bugfix: Ensure previous fiber context can be destroyed in fiber trampoline #7143
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes a memory leak that occurs when symmetric coroutines ares used like this:
In this case control will be transfered from
maintofiber 1tofiber 2and back tomain. Without this PR this code will result in a memory leak (fiber 1cannot be released). The fiber context offiber 1has to be destroyed immediately after switching tofiber 2because it is already marked as dead and will never be resumed. The context offiber 2is destroyed whenmainis resumed. Adding additional fibers in the example will fail to destroy every fiber context except for the last one.@trowski I discovered this bug due to
zend_fiber_stackbeing a tracked allocation after your last commit. 😉