commit:     bfe550f69ac4e0126412bc83f7e6f6f0d1c6dc1f
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat May  1 23:38:50 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat May  1 23:49:07 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=bfe550f6

PipeLogger: handle FileNotFoundError when cancelled during _start

Bug: https://bugs.gentoo.org/787542
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/_async/PipeLogger.py | 35 +++++++++++++++++++++++++----------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/lib/portage/util/_async/PipeLogger.py 
b/lib/portage/util/_async/PipeLogger.py
index b7c03043f..a335ce96f 100644
--- a/lib/portage/util/_async/PipeLogger.py
+++ b/lib/portage/util/_async/PipeLogger.py
@@ -33,16 +33,31 @@ class PipeLogger(AbstractPollTask):
                        self._log_file = log_file_path
                        _set_nonblocking(self._log_file.fileno())
                elif log_file_path is not None:
-                       self._log_file = open(_unicode_encode(log_file_path,
-                               encoding=_encodings['fs'], errors='strict'), 
mode='ab')
-                       if log_file_path.endswith('.gz'):
-                               self._log_file_real = self._log_file
-                               self._log_file = gzip.GzipFile(filename='', 
mode='ab',
-                                       fileobj=self._log_file)
-
-                       portage.util.apply_secpass_permissions(log_file_path,
-                               uid=portage.portage_uid, 
gid=portage.portage_gid,
-                               mode=0o660)
+                       try:
+                               self._log_file = open(
+                                       _unicode_encode(
+                                               log_file_path, 
encoding=_encodings["fs"], errors="strict"
+                                       ),
+                                       mode="ab",
+                               )
+
+                               if log_file_path.endswith(".gz"):
+                                       self._log_file_real = self._log_file
+                                       self._log_file = gzip.GzipFile(
+                                               filename="", mode="ab", 
fileobj=self._log_file
+                                       )
+
+                               portage.util.apply_secpass_permissions(
+                                       log_file_path,
+                                       uid=portage.portage_uid,
+                                       gid=portage.portage_gid,
+                                       mode=0o660,
+                               )
+                       except FileNotFoundError:
+                               if self._was_cancelled():
+                                       self._async_wait()
+                                       return
+                               raise
 
                if isinstance(self.input_fd, int):
                        self.input_fd = os.fdopen(self.input_fd, 'rb', 0)

Reply via email to