diff --git a/blacs/__main__.py b/blacs/__main__.py index 35668dcb..be1a5a28 100644 --- a/blacs/__main__.py +++ b/blacs/__main__.py @@ -602,7 +602,9 @@ def on_save_exit(self): self.front_panel_settings.save_front_panel_to_h5(self.settings_path,data[0],data[1],data[2],data[3],{"overwrite":True},force_new_conn_table=True) logger.info('Shutting down workers') for tab in self.tablist.values(): - tab.shutdown_workers() + # Tell tab to shutdown its workers if it has a method to do so. + if hasattr(tab, 'shutdown_workers'): + tab.shutdown_workers() QTimer.singleShot(100, self.finalise_quit) @@ -616,6 +618,14 @@ def finalise_quit(self, deadline=None, pending_threads=None): overdue = time.time() > deadline # Check for worker shutdown completion: for name, tab in list(self.tablist.items()): + # Immediately close tabs that don't support finalise_close_tab() + if not hasattr(tab, 'finalise_close_tab'): + try: + current_page = tab.close_tab(finalise=False) + except Exception as e: + logger.error('Couldn\'t close tab:\n%s' % str(e)) + del self.tablist[name] + continue fatal_error = tab.state == 'fatal error' if not tab.shutdown_workers_complete and overdue or fatal_error: # Give up on cleanly shutting down this tab's worker processes: