[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-11-13 Thread Ethan Furman


Change by Ethan Furman :


--
resolution:  -> fixed
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-10-13 Thread Ethan Furman


Ethan Furman  added the comment:

Going back through the various bug fixes that got cut from 3.10 to re-add to 
3.10.1.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-10-13 Thread Antoine Pitrou


Antoine Pitrou  added the comment:

It seems the problem is that bpo-44559 reset the enum module to a previous 
state without the bugfix.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-10-13 Thread Antoine Pitrou


Antoine Pitrou  added the comment:

Indeed, changeset  8c14f5a787b21d5a1eae5d5ee981431d1c0e055f is part of git 
main, but is not on the 3.10 branch AFAICT.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-10-13 Thread Antoine Pitrou


Antoine Pitrou  added the comment:

It appears this is *not* fixed in 3.10.0:

Python 3.10.0 (default, Oct 13 2021, 08:45:17) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import signal, gc
>>> class App: pass
... 
>>> def create_app():
...   app = App()
...   signal.signal(signal.SIGINT, signal.SIG_DFL)
... 
>>> [obj for obj in gc.get_objects() if type(obj) is App]
[]
>>> create_app()
>>> [obj for obj in gc.get_objects() if type(obj) is App]
[<__main__.App object at 0x7f2d3f3f1c30>]

--
nosy: +pitrou
resolution: fixed -> 
status: closed -> open

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-17 Thread Mark Dickinson


Mark Dickinson  added the comment:

Thank you for the quick fix!

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-15 Thread Ethan Furman


Change by Ethan Furman :


--
assignee:  -> ethan.furman
resolution:  -> fixed
stage: patch review -> resolved
status: open -> closed
type: enhancement -> behavior
versions: +Python 3.10, Python 3.9

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-12 Thread Ethan Furman


Ethan Furman  added the comment:


New changeset 6379924ecd51e346b42b0293da0f4442a0f67707 by Ethan Furman in 
branch '3.9':
[3.9] bpo-42248: [Enum] ensure exceptions raised in ``_missing_`` are released 
(GH-25350). (GH-25370)
https://github.com/python/cpython/commit/6379924ecd51e346b42b0293da0f4442a0f67707


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-12 Thread Ethan Furman


Ethan Furman  added the comment:


New changeset f396a1a940f8608a4be2a9ac4ef82e37c198ecd3 by Ethan Furman in 
branch '3.8':
[3.8] bpo-42248: [Enum] ensure exceptions raised in ``_missing_`` are released 
(GH-25350). (GH-25369)
https://github.com/python/cpython/commit/f396a1a940f8608a4be2a9ac4ef82e37c198ecd3


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-12 Thread Ethan Furman


Change by Ethan Furman :


--
pull_requests: +24103
pull_request: https://github.com/python/cpython/pull/25370

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-12 Thread Ethan Furman


Change by Ethan Furman :


--
pull_requests: +24102
pull_request: https://github.com/python/cpython/pull/25369

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-12 Thread Ethan Furman


Ethan Furman  added the comment:


New changeset 8c14f5a787b21d5a1eae5d5ee981431d1c0e055f by Ethan Furman in 
branch 'master':
bpo-42248: [Enum] ensure exceptions raised in ``_missing_`` are released 
(GH-25350)
https://github.com/python/cpython/commit/8c14f5a787b21d5a1eae5d5ee981431d1c0e055f


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-11 Thread Ethan Furman


Change by Ethan Furman :


--
keywords: +patch
pull_requests: +24085
stage:  -> patch review
pull_request: https://github.com/python/cpython/pull/25350

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-02 Thread Mark Dickinson


Mark Dickinson  added the comment:

Here's a cut-down example, at the prompt:

Python 3.9.2 (default, Mar 31 2021, 05:47:22) 
[Clang 11.0.3 (clang-1103.0.32.62)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import signal
>>> class App: pass
... 
>>> def create_app():
... app = App()
... signal.signal(signal.SIGINT, signal.SIG_DFL)
... 
>>> create_app()

At this point, since the App() instance was local to create_app, and wasn't 
returned, I'd expect there to be no App objects alive in the system. But it 
turns out there's still an App object being kept alive:

>>> import gc
>>> [obj for obj in gc.get_objects() if type(obj) is App]
[<__main__.App object at 0x10acb3d90>]

The cause is a call to _int_to_enum in signal.py which attempts to coerce the 
default signal handler to an element of Handlers. That coercion fails, leaving 
an exception

  ValueError(' is not a valid Handlers')

The traceback on that exception leads to the frame containing the call to 
Enum.__new__, which in turn contains a reference ve_exc back to the exception.

[In the real code, App was a wx.App object, and the App.__init__ method played 
the role of create_app.]

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2021-04-02 Thread Mark Dickinson


Mark Dickinson  added the comment:

I'm running into this, too, on Python 3.9.2; in my case it's causing 
segmentation faults in a wxPython-based application. 

Those segfaults aren't the fault of the reference cycle, of course; they're a 
result of wxPython being finicky about object cleanup order, but the existence 
of the enum reference cycle does make it harder to maneuver wxPython into a 
place where it doesn't crash.

--
nosy: +ethan.furman, mark.dickinson

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2020-12-04 Thread Gerald Dalley


Gerald Dalley  added the comment:

I and a few others have run into issues with the Enum constructors producing 
spurious reference cycles. This can cause memory explosions if large objects 
like numpy arrays are held in any of the relevant stack frames. Based on 
https://bugs.python.org/issue36820, it looks like the maintainers of CPython 
are open to fixing similar issues, and PRs look like the way to make progress.

--
nosy: +gerald.dalley2
type:  -> enhancement

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue42248] Raised exception in Enum keeping user objects alive unnecessarily

2020-11-02 Thread Eric Froemling


New submission from Eric Froemling :

I've run into an issue where exceptions thrown by Enum constructors are keeping 
my objects alive. The underlying issue seems to be the same as 
https://bugs.python.org/issue36820

The same method used to fix the issue above seems to work here: simply adding a 
try/finally clause around the error handling at the end of enum.Enum.__new__() 
which sets ve_exc and exc to None does the trick.

I've attached a short script which demonstrates the issue. I realize that the 
cyclic garbage collector will eventually handle this case, but its a bummer to 
lose determinism in the destruction of my objects.

I'd be happy to create a PR for this or whatever I can do to help; just let me 
know if I should (I'm new here).

--
components: Library (Lib)
files: enum_ref_loop_example.py
messages: 380249
nosy: efroemling
priority: normal
severity: normal
status: open
title: Raised exception in Enum keeping user objects alive unnecessarily
versions: Python 3.8
Added file: https://bugs.python.org/file49564/enum_ref_loop_example.py

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com