commit:     58cb50d4c9d318d164ed991cd4b60066c8646205
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 04:29:46 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Jun 24 04:32:26 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=58cb50d4

PipeLogger._unregister: sanity check for closed file or loop

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/_async/PipeLogger.py | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/lib/portage/util/_async/PipeLogger.py 
b/lib/portage/util/_async/PipeLogger.py
index 4271c8ee2..cc746bf52 100644
--- a/lib/portage/util/_async/PipeLogger.py
+++ b/lib/portage/util/_async/PipeLogger.py
@@ -162,15 +162,15 @@ class PipeLogger(AbstractPollTask):
        def _unregister(self):
                if self.input_fd is not None:
                        if isinstance(self.input_fd, int):
-                               self.scheduler.remove_reader(self.input_fd)
                                os.close(self.input_fd)
-                       else:
+                       elif not self.input_fd.closed:
                                
self.scheduler.remove_reader(self.input_fd.fileno())
                                self.input_fd.close()
                        self.input_fd = None
 
                if self._io_loop_task is not None:
-                       self._io_loop_task.done() or self._io_loop_task.cancel()
+                       if not self.scheduler.is_closed():
+                               self._io_loop_task.done() or 
self._io_loop_task.cancel()
                        self._io_loop_task = None
 
                if self.stdout_fd is not None:
@@ -178,8 +178,9 @@ class PipeLogger(AbstractPollTask):
                        self.stdout_fd = None
 
                if self._log_file is not None:
-                       self.scheduler.remove_writer(self._log_file.fileno())
-                       self._log_file.close()
+                       if not self._log_file.closed:
+                               
self.scheduler.remove_writer(self._log_file.fileno())
+                               self._log_file.close()
                        self._log_file = None
 
                if self._log_file_real is not None:

Reply via email to