summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/daemonize.py
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-09-04 15:54:12 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-09-05 18:01:37 +0100
commit74feaddda3b7cd5b3ab18d2f25bf5ef9581c9c47 (patch)
tree0e5d4c72d97ba4c0669aaf8394439778ea5ed33e /bitbake/lib/bb/daemonize.py
parentb7e26bedc2952e4ac0edface4bd20be22d7708cd (diff)
downloadpoky-74feaddda3b7cd5b3ab18d2f25bf5ef9581c9c47.tar.gz
bitbake: server/process: Various server startup logging fixes
There were various problems in the server startup loggin: a) stdout/stderr were not being flushed before forking which could potentially duplicate output b) there were separate buffers for stdout/stderr leading to confusing logs where the entries could be reordered. This was particularly confusing due to the separator the logs use to idendify new messages c) an fd wasn't being closed during server startup meaning if the server failed to start, the closed fd wasn't detected as it was held open by the other reference d) If the pipe was detected as being closed, the code incorrectly retried server startup e) The event code would remap stdout/stderr without flushing them, leading to lose log messages (Bitbake rev: 0594faa0b52ce5dbd948d836d88617d38d9862d1) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/daemonize.py')
-rw-r--r--bitbake/lib/bb/daemonize.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/bitbake/lib/bb/daemonize.py b/bitbake/lib/bb/daemonize.py
index bf16793468..613fb35536 100644
--- a/bitbake/lib/bb/daemonize.py
+++ b/bitbake/lib/bb/daemonize.py
@@ -16,6 +16,10 @@ def createDaemon(function, logfile):
16 background as a daemon, returning control to the caller. 16 background as a daemon, returning control to the caller.
17 """ 17 """
18 18
19 # Ensure stdout/stderror are flushed before forking to avoid duplicate output
20 sys.stdout.flush()
21 sys.stderr.flush()
22
19 try: 23 try:
20 # Fork a child process so the parent can exit. This returns control to 24 # Fork a child process so the parent can exit. This returns control to
21 # the command-line or shell. It also guarantees that the child will not 25 # the command-line or shell. It also guarantees that the child will not
@@ -66,12 +70,14 @@ def createDaemon(function, logfile):
66 70
67 try: 71 try:
68 so = open(logfile, 'a+') 72 so = open(logfile, 'a+')
69 se = so
70 os.dup2(so.fileno(), sys.stdout.fileno()) 73 os.dup2(so.fileno(), sys.stdout.fileno())
71 os.dup2(se.fileno(), sys.stderr.fileno()) 74 os.dup2(so.fileno(), sys.stderr.fileno())
72 except io.UnsupportedOperation: 75 except io.UnsupportedOperation:
73 sys.stdout = open(logfile, 'a+') 76 sys.stdout = open(logfile, 'a+')
74 sys.stderr = sys.stdout 77
78 # Have stdout and stderr be the same so log output matches chronologically
79 # and there aren't two seperate buffers
80 sys.stderr = sys.stdout
75 81
76 try: 82 try:
77 function() 83 function()