summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rdiff-backup/CHANGELOG4
-rw-r--r--rdiff-backup/rdiff_backup/regress.py15
-rw-r--r--rdiff-backup/rdiff_backup/robust.py7
3 files changed, 25 insertions, 1 deletions
diff --git a/rdiff-backup/CHANGELOG b/rdiff-backup/CHANGELOG
index b1b3b24..226a686 100644
--- a/rdiff-backup/CHANGELOG
+++ b/rdiff-backup/CHANGELOG
@@ -1,6 +1,10 @@
New in v1.1.16 (????/??/??)
---------------------------
+Add Windows-specific logic for checking if another rdiff-backup process
+is running. Do not try to handle non-existant SIGHUP and SIGQUIT signals
+on Windows. (Patch from Josh Nisly)
+
Do not use inode numbers on Windows and gracefully handle attempts to
rename over existing files on Windows. (Patch from Josh Nisly)
diff --git a/rdiff-backup/rdiff_backup/regress.py b/rdiff-backup/rdiff_backup/regress.py
index ca1591d..f8d1f6d 100644
--- a/rdiff-backup/rdiff_backup/regress.py
+++ b/rdiff-backup/rdiff_backup/regress.py
@@ -348,6 +348,21 @@ def check_pids(curmir_incs):
except OSError, exc:
if exc[0] == errno.ESRCH: return 0
else: log.Log("Warning: unable to check if PID %d still running" % (pid,), 2)
+ except AttributeError:
+ assert os.name == 'nt'
+ import win32api, win32con, pywintypes
+ try:
+ process = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS,
+ 0, pid)
+ except pywintypes.error, error:
+ if error[0] == 87: return 0
+ else:
+ msg = "Warning: unable to check if PID %d still running"
+ log.Log(msg % pid, 2)
+ if process:
+ win32api.CloseHandle(process)
+ return 1
+ return 0
return 1
for curmir_rp in curmir_incs:
diff --git a/rdiff-backup/rdiff_backup/robust.py b/rdiff-backup/rdiff_backup/robust.py
index 9dd0d85..df190d4 100644
--- a/rdiff-backup/rdiff_backup/robust.py
+++ b/rdiff-backup/rdiff_backup/robust.py
@@ -104,7 +104,12 @@ def signal_handler(signum, frame):
def install_signal_handlers():
"""Install signal handlers on current connection"""
- for signum in [signal.SIGQUIT, signal.SIGHUP, signal.SIGTERM]:
+ signals = [signal.SIGTERM, signal.SIGINT]
+ try:
+ signals.extend([signal.SIGHUP, signal.SIGQUIT])
+ except AttributeError:
+ pass
+ for signum in signals:
signal.signal(signum, signal_handler)