Skip to content

Commit 31341d3

Browse files
committed
default signal fix
1 parent 52b75d9 commit 31341d3

File tree

3 files changed

+17
-14
lines changed

3 files changed

+17
-14
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name = 'stackimpact',
5-
version = '1.0.1',
5+
version = '1.0.2',
66
description = 'StackImpact Python Agent',
77
author = 'StackImpact',
88
author_email = 'devops@stackimpact.com',

stackimpact/agent.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
class Agent:
2828

29-
AGENT_VERSION = "1.0.1"
29+
AGENT_VERSION = "1.0.2"
3030
SAAS_DASHBOARD_ADDRESS = "https://agent-api.stackimpact.com"
3131

3232
def __init__(self, **kwargs):
@@ -128,10 +128,10 @@ def _exit_handler(*arg):
128128

129129
atexit.register(_exit_handler)
130130

131-
register_signal(signal.SIGQUIT, _exit_handler)
132-
register_signal(signal.SIGINT, _exit_handler)
133-
register_signal(signal.SIGTERM, _exit_handler)
134-
register_signal(signal.SIGHUP, _exit_handler)
131+
register_signal(signal.SIGQUIT, _exit_handler, ignore_default = False)
132+
register_signal(signal.SIGINT, _exit_handler, ignore_default = False)
133+
register_signal(signal.SIGTERM, _exit_handler, ignore_default = False)
134+
register_signal(signal.SIGHUP, _exit_handler, ignore_default = False)
135135

136136
self.agent_started = True
137137
self.log('Agent started')

stackimpact/runtime.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,18 @@ def unpatch(obj, func_name):
120120
setattr(obj, func_name, getattr(wrapper, '__stackimpact_orig__'))
121121

122122

123-
def register_signal(signal_number, handler_func):
124-
prev_handler = signal.SIG_IGN
123+
def register_signal(signal_number, handler_func, ignore_default = True):
124+
prev_handler = None
125+
125126
def _handler(signum, frame):
126127
skip_prev = handler_func(signum, frame)
127128

128-
if not skip_prev and prev_handler not in [signal.SIG_IGN, signal.SIG_DFL] and callable(prev_handler):
129-
prev_handler(signum, frame)
130-
131-
prev_handler = signal.signal(signal_number, signal.SIG_IGN)
132-
if prev_handler != signal.SIG_IGN:
133-
signal.signal(signal_number, _handler)
129+
if not skip_prev:
130+
if callable(prev_handler):
131+
prev_handler(signum, frame)
132+
elif prev_handler == signal.SIG_DFL and not ignore_default:
133+
signal.signal(signum, signal.SIG_DFL)
134+
os.kill(os.getpid(), signum)
134135

136+
prev_handler = signal.signal(signal_number, _handler)
137+

0 commit comments

Comments
 (0)