summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngelos Evripiotis <jevripiotis@bloomberg.net>2019-08-01 10:37:18 +0100
committerAngelos Evripiotis <jevripiotis@bloomberg.net>2019-08-15 10:05:10 +0100
commitbfd4d7a47143486646c10a309501d9a67b7a2f82 (patch)
tree87940ac12001f8f48dc4fb9658e2aebc1c498fe6
parentaffa26ae150d6eacc7a67b1d3b733e9d904566e7 (diff)
downloadbuildstream-bfd4d7a47143486646c10a309501d9a67b7a2f82.tar.gz
_frontend/cli: support 'BST_FORCE_START_METHOD'
Allow users to force the start method via a 'BST_FORCE_START_METHOD' environment variable. This enables testing of the 'spawn' and 'forkserver' methods on platforms that don't require them.
-rw-r--r--src/buildstream/_frontend/cli.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/buildstream/_frontend/cli.py b/src/buildstream/_frontend/cli.py
index 81ee4ad83..20eaf2960 100644
--- a/src/buildstream/_frontend/cli.py
+++ b/src/buildstream/_frontend/cli.py
@@ -1,3 +1,4 @@
+import multiprocessing
import os
import sys
from contextlib import ExitStack
@@ -219,6 +220,18 @@ def override_main(self, args=None, prog_name=None, complete_var=None,
.format(stream.name), err=True)
sys.exit(-1)
+ # We can only set the global multiprocessing start method once; for that
+ # reason we're advised to do it inside the entrypoint, where it is easy to
+ # ensure the code path is only followed once.
+ if 'BST_FORCE_START_METHOD' in os.environ:
+ multiprocessing.set_start_method(os.environ['BST_FORCE_START_METHOD'])
+ print(
+ "BST_FORCE_START_METHOD: multiprocessing start method forced to:",
+ os.environ['BST_FORCE_START_METHOD'],
+ file=sys.stderr,
+ flush=True,
+ )
+
original_main(self, args=args, prog_name=prog_name, complete_var=None,
standalone_mode=standalone_mode, **extra)