From a3ba2a2faccaf01bd43999e760fa9d8e8ec1bf5f Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Thu, 21 Jul 2016 17:39:41 +0200 Subject: [PATCH] when changing volume, then also close external file object in _Stream --- deltatar/tarfile.py | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/deltatar/tarfile.py b/deltatar/tarfile.py index fcb6dcc..bddfbb7 100644 --- a/deltatar/tarfile.py +++ b/deltatar/tarfile.py @@ -2742,6 +2742,10 @@ class TarFile(object): # close current volume file (even if fileobj is external) self.fileobj.close() + if isinstance(self.fileobj, _Stream): + # _Stream.close() never closes external fileobj + self._dbg(3, 'closing _Stream\'s external fileobj') + self.fileobj.fileobj.close() try: if not self.new_volume_handler or\ @@ -3086,6 +3090,11 @@ class TarFile(object): copyfileobj(source, target, tarinfo.size) except OSError: source.close() + if isinstance(source, _Stream) and source._extfileobj: + # _Stream.close() never closes external fileobj + self._dbg(3, 'closing _Stream\'s external fileobj') + source.fileobj.close() + # only if we are extracting a multivolume this can be treated if not self.new_volume_handler: raise Exception("We need to read a new volume and you" -- 1.7.1