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 and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Stack overflow on GC of deeply nested filter() #102356
Comments
|
Reproduced in 3.10.6 with this, which does print the i = filter(None, ())
for _ in range(1000000):
i = filter(None, i)
print('done') Attempt This Online! (click "Execute" there to watch it crash after 1-2 seconds) |
This executes on Windows 10 with 3.12.0a5 in both IDLE and 3.12.0a5+ REPL built yesterday. About a minute in REPL and faster in IDLE. Result:
This bashes the compiler pretty hard, but we got a new parser-compiler in 3.10. Some of the nesting limits have since been removed. This should be closed unless someone reproduces with the last release or later repository build. |
Ok, turns out I can reproduce, but the segfault happens during cleanup, not immediately. @pablogsal, this looks like something in your area. |
For me, does not crash in REPL close or file run with installed or built debug binary. (Debug runs 2-3 minutes instead of 5 secs.)
|
I was able to reproduce with 3.11.2 on Linux. The backtrace starts:
Seems like it segfaults because all the filter objects are decrefing each other recursively, overflowing the stack. For me it segfaulted after well over 10k calls, but of course the exact number will be system dependent. |
I think many objects have this property.
It also works for I'm not sure whether or not the TRASHCAN mechanism is worth adding to all these cases to protect against artificially nested objects like this. |
I am taking a look at this, even if we apply #89060 we probably will need to backport so we need to solve the old fashion way. I am also mentoring someone and this can be a good bug to fix so it may take a bit more time to get a PR done. |
Add thrashcan macros to the deallocator of the filter objects to protect against deeply nested destruction of chains of nested filters.
…nGH-102426) Add thrashcan macros to the deallocator of the filter objects to protect against deeply nested destruction of chains of nested filters. (cherry picked from commit 66aa78c) Co-authored-by: Marta Gómez Macías <mgmacias@google.com>
…nGH-102426) Add thrashcan macros to the deallocator of the filter objects to protect against deeply nested destruction of chains of nested filters. (cherry picked from commit 66aa78c) Co-authored-by: Marta Gómez Macías <mgmacias@google.com>
Add thrashcan macros to the deallocator of the filter objects to protect against deeply nested destruction of chains of nested filters. (cherry picked from commit 66aa78c) Co-authored-by: Marta Gómez Macías <mgmacias@google.com>
Add thrashcan macros to the deallocator of the filter objects to protect against deeply nested destruction of chains of nested filters. (cherry picked from commit 66aa78c) Co-authored-by: Marta Gómez Macías <mgmacias@google.com>
Crash report
The in-built function filter() crashes as the following:
Error messages
Your environment
Linked PRs
The text was updated successfully, but these errors were encountered: