mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-20 15:27:07 +00:00
gst-validate-launcher: let gdb handle SIGINT itself
Otherwise both gdb and gst-validate-launcher will react to ^C at the same time, gdb will be killed by SIGHUP (because gst-validate-launcher quitted in consequence of the ^C) and the terminal state will be left garbled because readline inside gdb had disabled echo. https://bugzilla.gnome.org/show_bug.cgi?id=796396
This commit is contained in:
parent
bfa143caa9
commit
40dfb7174e
1 changed files with 20 additions and 1 deletions
|
@ -360,11 +360,22 @@ class Test(Loggable):
|
|||
pass
|
||||
|
||||
def thread_wrapper(self):
|
||||
def enable_sigint():
|
||||
# Restore the SIGINT handler for the child process (gdb) to ensure
|
||||
# it can handle it.
|
||||
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||
|
||||
if self.options.gdb and os.name != "nt":
|
||||
preexec_fn = enable_sigint
|
||||
else:
|
||||
preexec_fn = None
|
||||
|
||||
self.process = subprocess.Popen(self.command,
|
||||
stderr=self.out,
|
||||
stdout=self.out,
|
||||
env=self.proc_env,
|
||||
cwd=self.workdir)
|
||||
cwd=self.workdir,
|
||||
preexec_fn=preexec_fn)
|
||||
self.process.wait()
|
||||
if self.result is not Result.TIMEOUT:
|
||||
if self.process.returncode == 0:
|
||||
|
@ -492,6 +503,11 @@ class Test(Loggable):
|
|||
|
||||
if self.options.gdb:
|
||||
self.command = self.use_gdb(self.command)
|
||||
|
||||
self.previous_sigint_handler = signal.getsignal(signal.SIGINT)
|
||||
# Make the gst-validate executable ignore SIGINT while gdb is running.
|
||||
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||
|
||||
if self.options.valgrind:
|
||||
self.command = self.use_valgrind(self.command, self.proc_env)
|
||||
|
||||
|
@ -533,6 +549,9 @@ class Test(Loggable):
|
|||
self.thread.join()
|
||||
self.time_taken = time.time() - self._starting_time
|
||||
|
||||
if self.options.gdb:
|
||||
signal.signal(signal.SIGINT, self.previous_sigint_handler)
|
||||
|
||||
if self.result != Result.PASSED:
|
||||
message = str(self)
|
||||
end = "\n"
|
||||
|
|
Loading…
Reference in a new issue