Skip to content

Commit e81b81f

Browse files
committed
Fix memory leak.
1 parent 0638f68 commit e81b81f

2 files changed

Lines changed: 14 additions & 8 deletions

File tree

Lib/test/test_interpreters/test_api.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2371,7 +2371,7 @@ def __init__(self):
23712371

23722372
def __del__(self):
23732373
self._dummy.close()
2374-
if self.file:
2374+
if self.file is not None:
23752375
self.file.write("done")
23762376

23772377
def foo(self):
@@ -2385,6 +2385,15 @@ def interp(self):
23852385
self.assertFalse(is_pickleable(obj))
23862386
return obj
23872387

2388+
@contextlib.contextmanager
2389+
def share(self, obj, *, expect_proxy=True):
2390+
with interpreters.share(obj) as proxy:
2391+
self.assertTrue(_interpreters.is_shareable(proxy))
2392+
if expect_proxy:
2393+
self.assertTrue(sys._is_immortal(proxy))
2394+
self.assertFalse(is_pickleable(proxy))
2395+
yield proxy
2396+
23882397
def test_simple_proxy(self):
23892398
interp = interpreters.create()
23902399
try:
@@ -2395,10 +2404,7 @@ def get_unshareable(obj):
23952404
def get_interp(obj):
23962405
return obj.interp().id
23972406

2398-
with interpreters.share(self.unshareable()) as proxy:
2399-
self.assertTrue(_interpreters.is_shareable(proxy))
2400-
self.assertTrue(sys._is_immortal(proxy))
2401-
self.assertFalse(is_pickleable(proxy))
2407+
with self.share(self.unshareable()) as proxy:
24022408
self.assertEqual(interp.call(get_unshareable, proxy), 24)
24032409
self.assertEqual(interp.call(get_interp, proxy), interpreters.get_current().id)
24042410
finally:
@@ -2413,9 +2419,9 @@ def test_object_collected_after_proxy_closes(self):
24132419
def write_to_proxy(obj):
24142420
obj.file.write("hello")
24152421

2416-
with interpreters.share(self.unshareable(buffer)) as proxy:
2417-
self.assertFalse(is_pickleable(proxy))
2422+
with self.share(self.unshareable(buffer)) as proxy:
24182423
self.assertIsNone(interp.call(write_to_proxy, proxy))
2424+
self.assertEqual(str(proxy.file), buffer)
24192425

24202426
self.assertEqual(buffer.getvalue(), "hellodone")
24212427
finally:

Modules/_interpretersmodule.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@ _sharedobjectproxy_wrap_result(SharedObjectProxy *self, PyObject *result,
836836
}
837837

838838
PyObject *ret = _sharedobjectproxy_as_shared(&shared_result);
839-
//_sharedobjectproxy_finish_share(&shared_result);
839+
_sharedobjectproxy_finish_share(&shared_result);
840840
return ret;
841841
}
842842

0 commit comments

Comments
 (0)