summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2014-12-08 21:31:56 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-02-11 17:35:26 +0000
commit81d90389edd4d4778d3aec86e0775ab98dd1496e (patch)
tree04c1b62f414b7144309b48a5a865c55871701286
parent67ebf368aab8fbe372374190f013bdf2c83c59de (diff)
downloadbitbake-81d90389edd4d4778d3aec86e0775ab98dd1496e.tar.gz
bitbake-worker: Use setsid() rather than setpgid()
The bug has a long discussion of this. Basically, in some environments, the exact details of which aren't understood, a Ctrl+C signal to the UI is being transmitted to all the process children. Looking at the output of "ps ax -O tpgid", its clear the main process is still the terminal owner of these processes. stty -a on a problematic system shows: "-ignbrk brkint" and on a working system shows: "-ignbrk -brkint" The description of brkint would suggest this is the problem, setting up that terminal environment wasn't able to reproduce the problem though. It was confirmed that using setsid() caused the problem to be resolved and is probably the right thing to be doing anyway, so lets do it. [YOCTO #6949] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-xbin/bitbake-worker7
1 files changed, 5 insertions, 2 deletions
diff --git a/bin/bitbake-worker b/bin/bitbake-worker
index 371c99a67..8a2416125 100755
--- a/bin/bitbake-worker
+++ b/bin/bitbake-worker
@@ -156,8 +156,11 @@ def fork_off_task(cfg, data, workerdata, fn, task, taskname, appends, taskdepdat
bb.event.worker_fire = worker_child_fire
worker_pipe = pipeout
- # Make the child the process group leader
- os.setpgid(0, 0)
+ # Make the child the process group leader and ensure no
+ # child process will be controlled by the current terminal
+ # This ensures signals sent to the controlling terminal like Ctrl+C
+ # don't stop the child processes.
+ os.setsid()
# No stdin
newsi = os.open(os.devnull, os.O_RDWR)
os.dup2(newsi, sys.stdin.fileno())