Fix signal forwarding from borgmatic to Borg resulting in recursion traceback (#368).

This commit is contained in:
Dan Helfman 2020-11-18 10:29:03 -08:00
parent 7b1fb68c18
commit 1c9ae81987
2 changed files with 7 additions and 1 deletions

1
NEWS
View file

@ -4,6 +4,7 @@
* #355: Fix traceback when a database hook value is null in a configuration file. * #355: Fix traceback when a database hook value is null in a configuration file.
* #361: Merge override values when specifying the "--override" flag multiple times. The previous * #361: Merge override values when specifying the "--override" flag multiple times. The previous
behavior was to take the value of the last "--override" flag only. behavior was to take the value of the last "--override" flag only.
* #368: Fix signal forwarding from borgmatic to Borg resulting in recursion traceback.
1.5.10 1.5.10
* #347: Add hooks that run for the "extract" action: "before_extract" and "after_extract". * #347: Add hooks that run for the "extract" action: "before_extract" and "after_extract".

View file

@ -4,8 +4,13 @@ import signal
def _handle_signal(signal_number, frame): # pragma: no cover def _handle_signal(signal_number, frame): # pragma: no cover
''' '''
Send the signal to all processes in borgmatic's process group, which includes child process. Send the signal to all processes in borgmatic's process group, which includes child processes.
''' '''
# Prevent infinite signal handler recursion. If the parent frame is this very same handler
# function, we know we're recursing.
if frame.f_back.f_code.co_name == _handle_signal.__name__:
return
os.killpg(os.getpgrp(), signal_number) os.killpg(os.getpgrp(), signal_number)