Only close original fp in __del__ and __exit__ if original fp is exclusive

This commit is contained in:
Andrew Murray 2019-03-12 08:54:43 +11:00
parent 125a001b66
commit 22b0110f89
2 changed files with 17 additions and 4 deletions

View File

@ -532,6 +532,18 @@ class TestImage(PillowTestCase):
with Image.open(test_file) as im:
self.assert_warning(None, im.save, temp_file)
def test_load_on_nonexclusive_multiframe(self):
with open("Tests/images/frozenpond.mpo", "rb") as fp:
def act(fp):
im = Image.open(fp)
im.load()
act(fp)
with Image.open(fp) as im:
im.load()
self.assertFalse(fp.closed)
class MockEncoder(object):
pass

View File

@ -578,11 +578,12 @@ class Image(object):
return self
def __exit__(self, *args):
if hasattr(self, "_close__fp"):
self._close__fp()
if (hasattr(self, 'fp') and hasattr(self, '_exclusive_fp')
and self.fp and self._exclusive_fp):
self.fp.close()
and self._exclusive_fp):
if hasattr(self, "_close__fp"):
self._close__fp()
if self.fp:
self.fp.close()
self.fp = None
def close(self):