diff options
Diffstat (limited to 'pym/_emerge')
-rw-r--r-- | pym/_emerge/EbuildPhase.py | 7 | ||||
-rw-r--r-- | pym/_emerge/PollScheduler.py | 3 | ||||
-rw-r--r-- | pym/_emerge/SpawnProcess.py | 9 |
3 files changed, 16 insertions, 3 deletions
diff --git a/pym/_emerge/EbuildPhase.py b/pym/_emerge/EbuildPhase.py index f53570a5b..ed0be0b0e 100644 --- a/pym/_emerge/EbuildPhase.py +++ b/pym/_emerge/EbuildPhase.py @@ -273,13 +273,15 @@ class EbuildPhase(CompositeTask): temp_file = open(_unicode_encode(temp_log, encoding=_encodings['fs'], errors='strict'), 'rb') - log_file = self._open_log(log_path) + log_file, log_file_real = self._open_log(log_path) for line in temp_file: log_file.write(line) temp_file.close() log_file.close() + if log_file_real is not log_file: + log_file_real.close() os.unlink(temp_log) def _open_log(self, log_path): @@ -287,11 +289,12 @@ class EbuildPhase(CompositeTask): f = open(_unicode_encode(log_path, encoding=_encodings['fs'], errors='strict'), mode='ab') + f_real = f if log_path.endswith('.gz'): f = gzip.GzipFile(filename='', mode='ab', fileobj=f) - return f + return (f, f_real) def _die_hooks(self): self.returncode = None diff --git a/pym/_emerge/PollScheduler.py b/pym/_emerge/PollScheduler.py index a2b5c2466..fd9dfc0af 100644 --- a/pym/_emerge/PollScheduler.py +++ b/pym/_emerge/PollScheduler.py @@ -333,6 +333,7 @@ class PollScheduler(object): f = open(_unicode_encode(log_path, encoding=_encodings['fs'], errors='strict'), mode='ab') + f_real = f except IOError as e: if e.errno not in (errno.ENOENT, errno.ESTALE): raise @@ -349,6 +350,8 @@ class PollScheduler(object): f.write(_unicode_encode(msg)) f.close() + if f_real is not f: + f_real.close() _can_poll_device = None diff --git a/pym/_emerge/SpawnProcess.py b/pym/_emerge/SpawnProcess.py index 099407eda..065146c75 100644 --- a/pym/_emerge/SpawnProcess.py +++ b/pym/_emerge/SpawnProcess.py @@ -26,7 +26,7 @@ class SpawnProcess(SubProcess): "path_lookup", "pre_exec") __slots__ = ("args",) + \ - _spawn_kwarg_names + ("_selinux_type",) + _spawn_kwarg_names + ("_log_file_real", "_selinux_type",) _file_names = ("log", "process", "stdout") _files_dict = slot_dict_class(_file_names, prefix="") @@ -84,6 +84,7 @@ class SpawnProcess(SubProcess): files.log = open(_unicode_encode(logfile, encoding=_encodings['fs'], errors='strict'), mode='ab') if logfile.endswith('.gz'): + self._log_file_real = files.log files.log = gzip.GzipFile(filename='', mode='ab', fileobj=files.log) @@ -238,3 +239,9 @@ class SpawnProcess(SubProcess): self._unregister_if_appropriate(event) + def _unregister(self): + super(SpawnProcess, self)._unregister() + if self._log_file_real is not None: + # Avoid "ResourceWarning: unclosed file" since python 3.2. + self._log_file_real.close() + self._log_file_real = None |