# Bug report ### Bug description: `_remote_debugging.RemoteUnwinder.__init__()` can be called explicitly on an already initialized instance. The implementation assumes that initialization only happens once and overwrites owned resources without releasing them first. A minimal reproducer: ```python import gc import os import tracemalloc from _remote_debugging import RemoteUnwinder tracemalloc.start() unwinder = RemoteUnwinder(os.getpid(), cache_frames=True) gc.collect() before = tracemalloc.get_traced_memory()[0] for _ in range(100): unwinder.__init__(os.getpid(), cache_frames=True) del unwinder gc.collect() after = tracemalloc.get_traced_memory()[0] print(f"before: {before:,}") print(f"after: {after:,}") print(f"growth: {after - before:,}") ``` ### CPython versions tested on: CPython main branch ### Operating systems tested on: Linux