bpo-32710: Fix _overlapped.Overlapped memory leaks by vstinner · Pull Request #11489 · python/cpython (original) (raw)

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Conversation11 Commits2 Checks0 Files changed

Conversation

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

[ Show hidden characters]({{ revealButtonHref }})

vstinner

Fix memory leaks in asyncio ProactorEventLoop on overlapped operation
failure.

Changes:

https://bugs.python.org/issue32710

@vstinner

I don't think that this change deserves a NEWS entry.

serhiy-storchaka

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suspect that there are leaks when self->type is set to TYPE_NOT_STARTED.

@asvetlov

allocated_buffer and user_buffer are members of mutually exclusive C union type.
self->type is used to specify what union member is valid now.

asvetlov

@vstinner

I suspect that there are leaks when self->type is set to TYPE_NOT_STARTED.

Oh right... My previous memory leak fix was incomplete :-( I updated this PR to always clear the overlapped on failure, but also implemen tp_clear slot.

Does it look better now?

@vstinner vstinner changed the titlebpo-32710: Add tp_traverse to _overlapped.Overlapped bpo-32710: Fix _overlapped.Overlapped memory leaks

Jan 10, 2019

serhiy-storchaka

serhiy-storchaka

@vstinner

Fix memory leaks in asyncio ProactorEventLoop on overlapped operation failure.

Changes:

@vstinner

I changed my mind. It's wrong to implement tp_clear: if a buffer memory is release while an overlapped is still running, the process will crash. In practice, we shouldn't get into a case where tp_clear is called on a running ("pending") overlapped operation, but I prefer to be pendantic because overlapped are very tricky and error prone.

I amended my change to be able to edit the commit message: and to no longer define tp_clear.

@serhiy-storchaka

It is OK to not implement tp_clear. Not every object that provides tp_traverse should provide tp_clear.

Maybe make allocated_buffer and user_buffer not members of a union? Then you can traverse/clear without depending on type.

@vstinner

Maybe make allocated_buffer and user_buffer not members of a union? Then you can traverse/clear without depending on type.

I don't think that it would simplify much the code. An overlapped is used for a single action and then is destroyed. Its type shouldn't change, and I'm fine with the current switch() to factorize the code.

@vstinner

@miss-islington

Thanks @vstinner for the PR 🌮🎉.. I'm working now to backport this PR to: 3.7.
🐍🍒⛏🤖

@bedevere-bot

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request

Jan 11, 2019

@vstinner @miss-islington

Fix memory leaks in asyncio ProactorEventLoop on overlapped operation failures.

Changes:

Co-authored-by: Victor Stinner vstinner@redhat.com

miss-islington added a commit that referenced this pull request

Jan 11, 2019

@miss-islington @vstinner

Fix memory leaks in asyncio ProactorEventLoop on overlapped operation failures.

Changes:

Co-authored-by: Victor Stinner vstinner@redhat.com