builder: fix sigint handling for `v run` (#12246)
parent
909ed76b8f
commit
da7dad07a3
|
@ -138,7 +138,19 @@ fn (mut b Builder) run_compiled_executable_and_exit() {
|
||||||
if b.pref.is_verbose {
|
if b.pref.is_verbose {
|
||||||
println('running $run_process.filename with arguments $run_process.args')
|
println('running $run_process.filename with arguments $run_process.args')
|
||||||
}
|
}
|
||||||
|
// Ignore sigint and sigquit while running the compiled file,
|
||||||
|
// so ^C doesn't prevent v from deleting the compiled file.
|
||||||
|
// See also https://git.musl-libc.org/cgit/musl/tree/src/process/system.c
|
||||||
|
prev_int_handler := os.signal_opt(.int, eshcb) or { serror('set .int', err) }
|
||||||
|
mut prev_quit_handler := os.SignalHandler(eshcb)
|
||||||
|
$if !windows { // There's no sigquit on windows
|
||||||
|
prev_quit_handler = os.signal_opt(.quit, eshcb) or { serror('set .quit', err) }
|
||||||
|
}
|
||||||
run_process.wait()
|
run_process.wait()
|
||||||
|
os.signal_opt(.int, prev_int_handler) or { serror('restore .int', err) }
|
||||||
|
$if !windows {
|
||||||
|
os.signal_opt(.quit, prev_quit_handler) or { serror('restore .quit', err) }
|
||||||
|
}
|
||||||
ret := run_process.code
|
ret := run_process.code
|
||||||
run_process.close()
|
run_process.close()
|
||||||
b.cleanup_run_executable_after_exit(compiled_file)
|
b.cleanup_run_executable_after_exit(compiled_file)
|
||||||
|
@ -147,6 +159,15 @@ fn (mut b Builder) run_compiled_executable_and_exit() {
|
||||||
exit(0)
|
exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn eshcb(_ os.Signal) {
|
||||||
|
}
|
||||||
|
|
||||||
|
[noreturn]
|
||||||
|
fn serror(reason string, e IError) {
|
||||||
|
eprintln('could not $reason handler')
|
||||||
|
panic(e)
|
||||||
|
}
|
||||||
|
|
||||||
fn (mut v Builder) cleanup_run_executable_after_exit(exefile string) {
|
fn (mut v Builder) cleanup_run_executable_after_exit(exefile string) {
|
||||||
if v.pref.reuse_tmpc {
|
if v.pref.reuse_tmpc {
|
||||||
v.pref.vrun_elog('keeping executable: $exefile , because -keepc was passed')
|
v.pref.vrun_elog('keeping executable: $exefile , because -keepc was passed')
|
||||||
|
|
Loading…
Reference in New Issue