Files
patroni/helpers/utils.py
T
Alexander Kukushkin aa486194ae Wrap time.sleep into wrapper function
In case if it was interrupted by SIGCHLD but scheduled awake time is not
reached it will continue sleeping. For all other signals behaviuor is
not changed.
2015-05-28 15:47:51 +02:00

41 lines
901 B
Python

import os
import signal
import sys
import time
received_sigchld = False
def sigterm_handler(signo, stack_frame):
sys.exit()
def sigchld_handler(signo, stack_frame):
global received_sigchld
received_sigchld = True
try:
while True:
ret = os.waitpid(-1, os.WNOHANG)
if ret == (0, 0):
break
except OSError:
pass
def sleep(interval):
global received_sigchld
current_time = time.time()
end_time = current_time + interval
while current_time < end_time:
received_sigchld = False
time.sleep(end_time - current_time)
if not received_sigchld: # we will ignore only sigchld
break
current_time = time.time()
received_sigchld = False
def setup_signal_handlers():
signal.signal(signal.SIGTERM, sigterm_handler)
signal.signal(signal.SIGCHLD, sigchld_handler)