This is an automated email from the ASF dual-hosted git repository. tvb pushed a commit to branch aevri/win32 in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit f7842602fdfdd6d9ca20ddc44fcc300c2b6af2f0 Author: Angelos Evripiotis <[email protected]> AuthorDate: Wed Jun 12 16:21:57 2019 +0100 WIP: win32: job: signals / win32 --- src/buildstream/_scheduler/jobs/job.py | 12 ++++++------ src/buildstream/_scheduler/scheduler.py | 4 +++- src/buildstream/_signals.py | 4 ++++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/buildstream/_scheduler/jobs/job.py b/src/buildstream/_scheduler/jobs/job.py index debc470..2a25f40 100644 --- a/src/buildstream/_scheduler/jobs/job.py +++ b/src/buildstream/_scheduler/jobs/job.py @@ -289,7 +289,7 @@ class Job(): # the child process does not inherit the parent's state, but the main # process will be notified of any signal after we launch the child. # - with _signals.blocked([signal.SIGINT, signal.SIGTSTP, signal.SIGTERM], ignore=False): + with _signals.blocked([signal.SIGINT, signal.SIGTERM], ignore=False): self._process.start() # Wait for the child task to complete. @@ -772,15 +772,15 @@ class ChildJob(): # This avoids some SIGTSTP signals from grandchildren # getting propagated up to the master process - os.setsid() + #os.setsid() # First set back to the default signal handlers for the signals # we handle, and then clear their blocked state. # - signal_list = [signal.SIGTSTP, signal.SIGTERM] - for sig in signal_list: - signal.signal(sig, signal.SIG_DFL) - signal.pthread_sigmask(signal.SIG_UNBLOCK, signal_list) + #signal_list = [signal.SIGTSTP, signal.SIGTERM] + #for sig in signal_list: + # signal.signal(sig, signal.SIG_DFL) + #signal.pthread_sigmask(signal.SIG_UNBLOCK, signal_list) # Assign the queue we passed across the process boundaries # diff --git a/src/buildstream/_scheduler/scheduler.py b/src/buildstream/_scheduler/scheduler.py index 8a14391..73157b0 100644 --- a/src/buildstream/_scheduler/scheduler.py +++ b/src/buildstream/_scheduler/scheduler.py @@ -201,7 +201,7 @@ class Scheduler(): # Block this until we're finished terminating jobs, # this will remain blocked forever. - signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGINT]) + #signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGINT]) # jobs_suspended() # @@ -571,11 +571,13 @@ class Scheduler(): # Connects our signal handler event callbacks to the mainloop # def _connect_signals(self): + return self.loop.add_signal_handler(signal.SIGINT, self._interrupt_event) self.loop.add_signal_handler(signal.SIGTERM, self._terminate_event) self.loop.add_signal_handler(signal.SIGTSTP, self._suspend_event) def _disconnect_signals(self): + return self.loop.remove_signal_handler(signal.SIGINT) self.loop.remove_signal_handler(signal.SIGTSTP) self.loop.remove_signal_handler(signal.SIGTERM) diff --git a/src/buildstream/_signals.py b/src/buildstream/_signals.py index 2df2c79..733f28e 100644 --- a/src/buildstream/_signals.py +++ b/src/buildstream/_signals.py @@ -135,6 +135,8 @@ def suspend_handler(sig, frame): # @contextmanager def suspendable(suspend_callback, resume_callback): + yield + return global suspendable_stack # pylint: disable=global-statement outermost = bool(not suspendable_stack) @@ -164,6 +166,8 @@ def suspendable(suspend_callback, resume_callback): # @contextmanager def blocked(signal_list, ignore=True): + yield + return with ExitStack() as stack:
