parallel_emerge: Make sure _lock_fn is set before starting workers.
Portage 2.3.49 spawns a process to find the default value of _lock_fn
which isn't allowed inside a Pool() worker process because they are
marked as daemons which are not allowed to have children. This fix makes
sure the default value is set prior to spawning the children.
BUG=chromium:874977
TEST=./build_packages --board=${BOARD} # for the old and new portage
Change-Id: I58987a70d0f1b1c60fb0703f9c38602ced7e9b95
Reviewed-on: https://chromium-review.googlesource.com/1376670
Commit-Ready: Allen Webb <allenwebb@google.com>
Tested-by: Allen Webb <allenwebb@google.com>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
diff --git a/scripts/parallel_emerge.py b/scripts/parallel_emerge.py
index 86a7a18..62b4bf9 100644
--- a/scripts/parallel_emerge.py
+++ b/scripts/parallel_emerge.py
@@ -1379,6 +1379,15 @@
self._job_queue = multiprocessing.Queue()
self._print_queue = multiprocessing.Queue()
+ # Portage 2.3.49 spawns a process to find the default value of _lock_fn
+ # which isn't allowed inside a Pool() worker process because they are
+ # marked as daemons which are not allowed to have children. This fix makes
+ # sure the default value is set prior to spawning the children.
+ try:
+ portage.locks._get_lock_fn()
+ except AttributeError:
+ pass
+
self._fetch_queue = multiprocessing.Queue()
args = (self._fetch_queue, self._job_queue, emerge, package_db, True)
self._fetch_pool = multiprocessing.Pool(self._fetch_procs, EmergeWorker,