Fix memory leak of prepared queries #60
Open
+1
−0
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.
When a query is prepared with
ibase_prepare()
and then it is freed withibase_free_query()
, the associatedzend_resource
object is never freed, because the functionibase_free_query()
does not decrease its ref count and it stays forever at 1 (after all the variables holding reference in php are destroyed).I was also considering to use a following fix:
This solution would avoid memory access violations in cases when the
refcount
is already 0 (because thezend_resource
would get freed inzend_list_close()
), but I would argue that this situation should never occurr and it could happen only if the internal reference created duringibase_prepare()
was freed by some other parts of the code. But that is not correct and instead, it should be always freed only here.