2021-05-05 15:39:02 +03:00
|
|
|
import os
|
|
|
|
|
|
|
|
fn former_handler(signal os.Signal) {
|
|
|
|
println('former_handler')
|
|
|
|
exit(0)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn default_handler(signal os.Signal) {
|
|
|
|
println('default_handler')
|
|
|
|
exit(0)
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_signal_opt() {
|
|
|
|
os.signal_opt(.int, default_handler) or { assert false }
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_signal_opt_invalid_argument() {
|
|
|
|
// Can't register a signal on SIGKILL
|
|
|
|
if _ := os.signal_opt(.kill, default_handler) {
|
|
|
|
assert false
|
|
|
|
}
|
|
|
|
os.signal_opt(.kill, default_handler) or {
|
2022-02-11 16:52:33 +03:00
|
|
|
assert err.msg() == 'Invalid argument'
|
2022-04-12 13:38:40 +03:00
|
|
|
assert err.code() == 22
|
2021-05-05 15:39:02 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_signal_opt_return_former_handler() {
|
|
|
|
func1 := os.signal_opt(.term, former_handler) or { panic('unexpected error') }
|
|
|
|
assert isnil(func1)
|
|
|
|
func2 := os.signal_opt(.term, default_handler) or { panic('unexpected error') }
|
|
|
|
assert !isnil(func2)
|
|
|
|
// this should work, but makes the CI fail because of a bug in clang -fsanitize=memory
|
|
|
|
// assert func2 == former_handler
|
|
|
|
}
|