From cd5e58962030be3322a27d334cfbb339262b7652 Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Thu, 28 May 2015 13:04:21 +0200 Subject: [PATCH] Revert previous commit (restore sigchld_handler) --- governor.py | 13 ++++++++++++- tests/test_governor.py | 12 +++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/governor.py b/governor.py index 58ca26ec..85cd28e0 100755 --- a/governor.py +++ b/governor.py @@ -17,6 +17,17 @@ def sigterm_handler(signo, stack_frame): sys.exit() +# handle SIGCHILD, since we are the equivalent of the INIT process +def sigchld_handler(signo, stack_frame): + try: + while True: + ret = os.waitpid(-1, os.WNOHANG) + if ret == (0, 0): + break + except OSError: + pass + + class Governor: def __init__(self, config): @@ -66,8 +77,8 @@ class Governor: def main(): logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s', level=logging.INFO) - signal.signal(signal.SIGCHLD, signal.SIG_IGN) signal.signal(signal.SIGTERM, sigterm_handler) + signal.signal(signal.SIGCHLD, sigchld_handler) if len(sys.argv) < 2 or not os.path.isfile(sys.argv[1]): print('Usage: {} config.yml'.format(sys.argv[0])) diff --git a/tests/test_governor.py b/tests/test_governor.py index acc44de4..941d6d45 100644 --- a/tests/test_governor.py +++ b/tests/test_governor.py @@ -1,3 +1,4 @@ +import os import psycopg2 import requests import subprocess @@ -6,7 +7,7 @@ import time import unittest import yaml -from governor import Governor, main, sigterm_handler +from governor import Governor, main, sigchld_handler, sigterm_handler from test_ha import true, false from test_postgresql import Postgresql, subprocess_call, psycopg2_connect from test_etcd import requests_get, requests_put, requests_delete @@ -21,6 +22,10 @@ def nop(*args, **kwargs): pass +def os_waitpid(a, b): + return (0, 0) + + def time_sleep(_): raise Exception() @@ -83,3 +88,8 @@ class TestGovernor(unittest.TestCase): time.sleep = time_sleep g.postgresql.sync_from_leader = false self.assertRaises(Exception, g.initialize) + + def test_sigchld_handler(self): + sigchld_handler(None, None) + os.waitpid = os_waitpid + sigchld_handler(None, None)