From b9d0cd4a4debfc761c85f1d3027520a37ecc6a07 Mon Sep 17 00:00:00 2001 From: Ajeem Khan K Date: Sun, 29 Mar 2026 22:38:24 +0530 Subject: [PATCH 1/2] Guard snapshot process signals in GUI --- qt/app.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/qt/app.py b/qt/app.py index 90c261343..bd04b9581 100644 --- a/qt/app.py +++ b/qt/app.py @@ -490,11 +490,11 @@ def _create_actions(self): _('Use checksums for file change detection.')), 'act_pause_take_snapshot': ( icon.PAUSE, _('Pause backup process'), - lambda: os.kill(self.snapshots.pid(), signal.SIGSTOP), None, + lambda: self._signal_snapshot_process(signal.SIGSTOP), None, None), 'act_resume_take_snapshot': ( icon.RESUME, _('Resume backup process'), - lambda: os.kill(self.snapshots.pid(), signal.SIGCONT), None, + lambda: self._signal_snapshot_process(signal.SIGCONT), None, None), 'act_stop_take_snapshot': ( icon.STOP, _('Stop backup process'), @@ -1848,12 +1848,29 @@ def _create_backup(self, checksum: bool) -> None: backintime.takeSnapshotAsync(self.config, checksum=checksum) self._update_backup_status(True) + def _signal_snapshot_process(self, sig: signal.Signals) -> bool: + pid = self.snapshots.pid() + + if not tools.processAlive(pid): + self._update_backup_status(True) + return False + + try: + os.kill(pid, sig) + except ProcessLookupError: + logger.debug(f'Ignoring signal {sig} for vanished snapshot process {pid}.') + self._update_backup_status(True) + return False + + return True + def _slot_backup_stop(self): - os.kill(self.snapshots.pid(), signal.SIGKILL) + if self._signal_snapshot_process(signal.SIGKILL): + self.snapshots.setTakeSnapshotMessage(0, 'Backup terminated') + self.act_stop_take_snapshot.setEnabled(False) self.act_pause_take_snapshot.setEnabled(False) self.act_resume_take_snapshot.setEnabled(False) - self.snapshots.setTakeSnapshotMessage(0, 'Backup terminated') # |---------| # | Restore | From f124ce2538040a210e84fff29f12166da89894ca Mon Sep 17 00:00:00 2001 From: Ajeem Khan K Date: Mon, 30 Mar 2026 17:29:14 +0530 Subject: [PATCH 2/2] Wrap debug log line for lint compliance --- qt/app.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qt/app.py b/qt/app.py index bd04b9581..386b58db6 100644 --- a/qt/app.py +++ b/qt/app.py @@ -1858,7 +1858,8 @@ def _signal_snapshot_process(self, sig: signal.Signals) -> bool: try: os.kill(pid, sig) except ProcessLookupError: - logger.debug(f'Ignoring signal {sig} for vanished snapshot process {pid}.') + logger.debug( + f'Ignoring signal {sig} for vanished snapshot process {pid}.') self._update_backup_status(True) return False