Fix GH-18139: Memory leak when overriding some settings via readline_info()#20794
Closed
ndossche wants to merge 2 commits intophp:PHP-8.3from
Closed
Fix GH-18139: Memory leak when overriding some settings via readline_info()#20794ndossche wants to merge 2 commits intophp:PHP-8.3from
ndossche wants to merge 2 commits intophp:PHP-8.3from
Conversation
…ne_info() The reason why freeing was not done yet is because the pointer in these variables may be: - Static data set by the readline/libedit library initially, not heap data. - Data set by another thread. Although the libraries appear to be not thread-safe anyway. To solve this, introduce some TLS variables to hold a pointer for us when we override the settings, such that we can free them and are certain they are allocated by us.
Member
Author
Member
|
I have not look at readline source for a long time, but it seems to use globals and thread safety care falls upon the code consumer I believe so your comments make sense. |
Member
Author
|
I believe it can't be fully made thread-safe. Perhaps at least the existing globals we have in the extension itself can be made thread-safe, but that's kinda out of scope for this PR. |
devnexen
approved these changes
Dec 29, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The reason why freeing was not done yet is because the pointer in these variables may be:
To solve this, introduce some TLS variables to hold a pointer for us when we override the settings, such that we can free them and are certain they are allocated by us.