1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

builder: fix sigint handling for v run (#12246)

This commit is contained in:
czkz 2021-10-21 16:40:32 +03:00 committed by GitHub
parent 909ed76b8f
commit da7dad07a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -138,7 +138,19 @@ fn (mut b Builder) run_compiled_executable_and_exit() {
if b.pref.is_verbose {
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()
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
run_process.close()
b.cleanup_run_executable_after_exit(compiled_file)
@ -147,6 +159,15 @@ fn (mut b Builder) run_compiled_executable_and_exit() {
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) {
if v.pref.reuse_tmpc {
v.pref.vrun_elog('keeping executable: $exefile , because -keepc was passed')