From 70f1a3db5e102cff658e51007e0cac5207f197bb Mon Sep 17 00:00:00 2001 From: Alexandru DAMIAN Date: Thu, 9 Jan 2014 15:11:59 +0000 Subject: bitbake: toaster: clean exit on bb server shutdown This patch adds the capability to have the Toaster UI detect when the Bitbake server exited and cleanly trigger a clean shutdown of the system through the toaster starting script. (Bitbake rev: a9cfa3eacfc99550e1ad3f8bb61b2a0bc9b44332) Signed-off-by: Alexandru DAMIAN Signed-off-by: Richard Purdie --- bitbake/bin/toaster | 28 ++++++++++++++++++++++++++-- bitbake/lib/bb/ui/toasterui.py | 7 +++++-- 2 files changed, 31 insertions(+), 4 deletions(-) (limited to 'bitbake') diff --git a/bitbake/bin/toaster b/bitbake/bin/toaster index 9c0a15ff67..b27f7c28bb 100755 --- a/bitbake/bin/toaster +++ b/bitbake/bin/toaster @@ -68,11 +68,16 @@ function addtoConfiguration() echo $1 >> ${BUILDDIR}/conf/$2 } +INSTOPSYSTEM=0 + # define the stop command function stop_system() { + # prevent reentry + if [ $INSTOPSYSTEM == 1 ]; then return; fi + INSTOPSYSTEM=1 if [ -f ${BUILDDIR}/.toasterui.pid ]; then - kill $(< ${BUILDDIR}/.toasterui.pid ) + kill $(< ${BUILDDIR}/.toasterui.pid ) 2>/dev/null rm ${BUILDDIR}/.toasterui.pid fi BBSERVER=localhost:8200 bitbake -m @@ -80,8 +85,24 @@ function stop_system() webserverKillAll # force stop any misbehaving bitbake server lsof bitbake.lock | awk '{print $2}' | grep "[0-9]\+" | xargs -n1 -r kill + trap - SIGHUP + trap - SIGCHLD + INSTOPSYSTEM=0 +} + +function check_pidbyfile() { + [ -e $1 ] && kill -0 $(< $1) 2>/dev/null } + +function notify_chldexit() { + if [ $NOTOASTERUI == 0 ]; then + check_pidbyfile ${BUILDDIR}/.toasterui.pid && return + stop_system + fi +} + + # We make sure we're running in the current shell and in a good environment if [ -z "$ZSH_NAME" ] && [ `basename \"$0\"` = `basename \"$BASH_SOURCE\"` ]; then @@ -179,10 +200,13 @@ case $CMD in stop_system echo "Failed ${CMD}." fi + # stop system on terminal exit + set -o monitor + trap stop_system SIGHUP + trap notify_chldexit SIGCHLD ;; stop ) stop_system - trap '' SIGHUP echo "Successful ${CMD}." ;; esac diff --git a/bitbake/lib/bb/ui/toasterui.py b/bitbake/lib/bb/ui/toasterui.py index 453eaf9485..37d6b1a0cf 100644 --- a/bitbake/lib/bb/ui/toasterui.py +++ b/bitbake/lib/bb/ui/toasterui.py @@ -249,6 +249,10 @@ def main(server, eventHandler, params ): buildinfohelper.store_license_manifest_path(event) continue + if isinstance(event, bb.cooker.CookerExit): + # exit when the server exits + break + # ignore if isinstance(event, (bb.event.BuildBase, bb.event.StampUpdate, @@ -258,8 +262,7 @@ def main(server, eventHandler, params ): bb.event.OperationProgress, bb.command.CommandFailed, bb.command.CommandExit, - bb.command.CommandCompleted, - bb.cooker.CookerExit)): + bb.command.CommandCompleted)): continue if isinstance(event, bb.event.DepTreeGenerated): -- cgit v1.2.3-54-g00ecf