diff -r a707f3cc0e8e Lib/tarfile.py --- a/Lib/tarfile.py Mon Jan 13 14:24:11 2014 +0200 +++ b/Lib/tarfile.py Mon Jan 13 16:31:33 2014 +0200 @@ -1617,7 +1617,7 @@ if not extfileobj and fileobj is not None: fileobj.close() raise - t._extfileobj = extfileobj + t._extfileobj = False return t @classmethod diff -r a707f3cc0e8e Lib/test/test_tarfile.py --- a/Lib/test/test_tarfile.py Mon Jan 13 14:24:11 2014 +0200 +++ b/Lib/test/test_tarfile.py Mon Jan 13 16:31:33 2014 +0200 @@ -841,6 +841,12 @@ tar.addfile(tarfile.TarInfo("foo")) tar.close() self.assertFalse(fobj.closed, "external fileobjs must never closed") + # Issue #20238: Incomplete gzip output with mode="w:gz" + data = fobj.getvalue() + del tar + support.gc_collect() + self.assertFalse(fobj.closed) + self.assertEqual(data, fobj.getvalue()) class WriteTest(WriteTestBase, unittest.TestCase):