From 1e7eaf37767bfe6a3c162a63e7b8dc22202dbeb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Fri, 10 Jan 2014 03:38:38 +0100 Subject: [PATCH] backups: disable SIGCHLD handler for the time of running backup Otherwise some syscalls would return EINTR. This is much easier (and more readable!) solution than wrapping each syscall with try:except and some loop. --- qubesmanager/restore.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/qubesmanager/restore.py b/qubesmanager/restore.py index bad9ce9..1536711 100644 --- a/qubesmanager/restore.py +++ b/qubesmanager/restore.py @@ -32,6 +32,7 @@ from qubes.qubes import QubesDaemonPidfile from qubes.qubes import QubesHost from qubes.qubes import qubes_base_dir import qubesmanager.resources_rc +import signal from pyinotify import WatchManager, Notifier, ThreadedNotifier, EventsCodes, ProcessEvent @@ -210,6 +211,7 @@ class RestoreVMsWindow(Ui_Restore, QWizard): def current_page_changed(self, id): + old_sigchld_handler = signal.signal(signal.SIGCHLD, signal.SIG_DFL) if self.currentPage() is self.select_vms_page: self.__fill_vms_list__() @@ -244,8 +246,8 @@ class RestoreVMsWindow(Ui_Restore, QWizard): self.app.processEvents() time.sleep (0.1) try: - for (signal,data) in iter(self.feedback_queue.get_nowait,None): - self.emit(signal,data) + for (signal_to_emit,data) in iter(self.feedback_queue.get_nowait,None): + self.emit(signal_to_emit,data) except Empty: pass @@ -257,6 +259,8 @@ class RestoreVMsWindow(Ui_Restore, QWizard): self.progress_bar.setValue(100) self.button(self.FinishButton).setEnabled(True) + signal.signal(signal.SIGCHLD, old_sigchld_handler) + def all_vms_good(self): for vminfo in self.vms_to_restore.values(): if not vminfo['good-to-go']: