# 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\
                     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"