parallel_emerge: preload portage.data.userpriv_groups

We are seeing bad file descriptor errors during the evaluation of
portage.data.userpriv_groups.
As it is lazily evaluated and we fork before each emerge step, it is
executed hundreds of times. Load it before we start forking so that it is
evaluated only once.

BUG=chromium:433482
TEST=Modify portage to fail if the userpriv_groups is evaluated after we fork.
build_packages fails when we comment the evaluation in parallel_emerge.
TEST=trybot run on gizmo, beaglebone, daisy, link, chromiumos-sdk,
  lumpy-incremental.

Change-Id: I945092da7b6ee04baee284e3480457ae87943ff8
Reviewed-on: https://chromium-review.googlesource.com/234572
Reviewed-by: David James <davidjames@chromium.org>
Commit-Queue: Bertrand Simonnet <bsimonnet@chromium.org>
Tested-by: Bertrand Simonnet <bsimonnet@chromium.org>
diff --git a/scripts/parallel_emerge.py b/scripts/parallel_emerge.py
index 4eee7bb..fc61351 100644
--- a/scripts/parallel_emerge.py
+++ b/scripts/parallel_emerge.py
@@ -1896,6 +1896,12 @@
     # Now upgrade the rest.
     os.execvp(args[0], args)
 
+  # Attempt to solve crbug.com/433482
+  # The file descriptor error appears only when getting userpriv_groups
+  # (lazily generated). Loading userpriv_groups here will reduce the number of
+  # calls from few hundreds to one.
+  portage.data._get_global('userpriv_groups')
+
   # Run the queued emerges.
   scheduler = EmergeQueue(deps_graph, emerge, deps.package_db, deps.show_output,
                           deps.unpack_only)