summaryrefslogtreecommitdiff
path: root/distbuild
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2015-02-11 12:13:41 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2015-02-11 12:53:58 +0000
commitd0143c276f31bf9de26dfbe92d64693cdcbd2014 (patch)
tree809f852a285c704c8a84fef092e60b2a2707a42b /distbuild
parenta006c418d3cc81d6d4a4353a43133b40486a6610 (diff)
downloadmorph-d0143c276f31bf9de26dfbe92d64693cdcbd2014.tar.gz
distbuild: Fix case where 'computing build graph' would hang forever
If there's no distbuild-helper process running on the controller then the controller would hang forever. This situation is unlikely, but it's important to give the user feedback instead of silently hanging forever.
Diffstat (limited to 'distbuild')
-rw-r--r--distbuild/build_controller.py3
-rw-r--r--distbuild/mainloop.py5
2 files changed, 7 insertions, 1 deletions
diff --git a/distbuild/build_controller.py b/distbuild/build_controller.py
index cfa0e2e2..8dbbaef9 100644
--- a/distbuild/build_controller.py
+++ b/distbuild/build_controller.py
@@ -246,6 +246,9 @@ class BuildController(distbuild.StateMachine):
def _request_command_execution(self, argv, request_id):
'''Tell the controller's distbuild-helper to run a command.'''
+ if self.mainloop.n_state_machines_of_type(distbuild.HelperRouter) == 0:
+ self.fail('No distbuild-helper process running on controller!')
+
msg = distbuild.message('exec-request',
id=request_id,
argv=argv,
diff --git a/distbuild/mainloop.py b/distbuild/mainloop.py
index f0e5eebc..8c46b2fb 100644
--- a/distbuild/mainloop.py
+++ b/distbuild/mainloop.py
@@ -56,7 +56,10 @@ class MainLoop(object):
def remove_state_machine(self, machine):
logging.debug('MainLoop.remove_state_machine: %s' % machine)
self._machines.remove(machine)
-
+
+ def n_state_machines_of_type(self, machine_type):
+ return len([m for m in self._machines if isinstance(m, machine_type)])
+
def add_event_source(self, event_source):
logging.debug('MainLoop.add_event_source: %s' % event_source)
self._sources.append(event_source)