[oe-commits] [bitbake] 02/02: daemonize: Flush stdio on exit

git at git.openembedded.org git at git.openembedded.org
Tue Aug 21 22:42:46 UTC 2018


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository bitbake.

commit fcc8e1ff53696f78dd64b4ee32f3c433b7a47df0
Author: Joshua Watt <jpewhacker at gmail.com>
AuthorDate: Tue Aug 21 09:04:16 2018 -0500

    daemonize: Flush stdio on exit
    
    In spite of a comment suggesting otherwise, os._exit() does not flush
    buffered output from file descriptors before exiting the process like
    os.exit() does. This means that any un-flushed output is lost in the
    daemon process, in particular the traceback from any thrown exceptions,
    making debugging exceptions in the daemon quite difficult.
    
    The solution is to flush stdout and stderr before exiting.
    
    Signed-off-by: Joshua Watt <JPEWhacker at gmail.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 lib/bb/daemonize.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/bb/daemonize.py b/lib/bb/daemonize.py
index 8300d1d..bf16793 100644
--- a/lib/bb/daemonize.py
+++ b/lib/bb/daemonize.py
@@ -49,8 +49,8 @@ def createDaemon(function, logfile):
             # exit() or _exit()?
             # _exit is like exit(), but it doesn't call any functions registered
             # with atexit (and on_exit) or any registered signal handlers.  It also
-            # closes any open file descriptors.  Using exit() may cause all stdio
-            # streams to be flushed twice and any temporary files may be unexpectedly
+            # closes any open file descriptors, but doesn't flush any buffered output.
+            # Using exit() may cause all any temporary files to be unexpectedly
             # removed.  It's therefore recommended that child branches of a fork()
             # and the parent branch(es) of a daemon use _exit().
             os._exit(0)
@@ -79,4 +79,9 @@ def createDaemon(function, logfile):
         traceback.print_exc()
     finally:
         bb.event.print_ui_queue()
+        # os._exit() doesn't flush open files like os.exit() does. Manually flush
+        # stdout and stderr so that any logging output will be seen, particularly
+        # exception tracebacks.
+        sys.stdout.flush()
+        sys.stderr.flush()
         os._exit(0)

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list