summaryrefslogtreecommitdiffstats
path: root/pym/_emerge
diff options
context:
space:
mode:
Diffstat (limited to 'pym/_emerge')
-rw-r--r--pym/_emerge/EbuildPhase.py7
-rw-r--r--pym/_emerge/PollScheduler.py3
-rw-r--r--pym/_emerge/SpawnProcess.py9
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