summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbitbake/bin/toaster28
-rw-r--r--bitbake/lib/bb/ui/toasterui.py7
2 files changed, 31 insertions, 4 deletions
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):