summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChristopher Larson <chris_larson@mentor.com>2012-02-07 12:07:40 -0600
committerChristopher Larson <chris_larson@mentor.com>2012-02-08 08:11:17 -0600
commitce9e0946b8a412616074809c76fba54f8bff36c4 (patch)
tree78cdbc739325a29342b9b02e9d287fe2fe530d6c /lib
parent7c39cfd8e060cca8753ac4114775447b18e13067 (diff)
downloadbitbake-contrib-ce9e0946b8a412616074809c76fba54f8bff36c4.tar.gz
knotty: shut down more cleanly
This ensures that when we are shutting down, we drain the queue of events from the server. This ensures that the server never gets hung up on the join of the feeder thread associated with the event queue, thereby avoiding a bitbake hang issue. Also, since the third keyboard interrupt now behaves the same as the second, removed that message. Signed-off-by: Christopher Larson <chris_larson@mentor.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/bb/ui/knotty.py15
1 files changed, 7 insertions, 8 deletions
diff --git a/lib/bb/ui/knotty.py b/lib/bb/ui/knotty.py
index e1d42f787..22370efc6 100644
--- a/lib/bb/ui/knotty.py
+++ b/lib/bb/ui/knotty.py
@@ -118,6 +118,8 @@ def main(server, eventHandler):
try:
event = eventHandler.waitEvent(0.25)
if event is None:
+ if shutdown > 1:
+ break
continue
helper.eventHandler(event)
if isinstance(event, bb.runqueue.runQueueExitWait):
@@ -199,18 +201,18 @@ def main(server, eventHandler):
print("Loaded %d entries from dependency cache." % event.num_entries)
continue
- if isinstance(event, bb.command.CommandCompleted):
- break
if isinstance(event, bb.command.CommandFailed):
return_value = event.exitcode
logger.error("Command execution failed: %s", event.error)
- break
+ shutdown = 2
+ continue
if isinstance(event, bb.command.CommandExit):
if not return_value:
return_value = event.exitcode
continue
- if isinstance(event, bb.cooker.CookerExit):
- break
+ if isinstance(event, (bb.command.CommandCompleted, bb.cooker.CookerExit)):
+ shutdown = 2
+ continue
if isinstance(event, bb.event.MultipleProviders):
logger.info("multiple providers are available for %s%s (%s)", event._is_runtime and "runtime " or "",
event._item,
@@ -269,9 +271,6 @@ def main(server, eventHandler):
if ioerror.args[0] == 4:
pass
except KeyboardInterrupt:
- if shutdown == 2:
- print("\nThird Keyboard Interrupt, exit.\n")
- break
if shutdown == 1:
print("\nSecond Keyboard Interrupt, stopping...\n")
server.runCommand(["stateStop"])