Fix process management
- Apr 24, 2022
-
-
Yaroslav Dynnikov authored
We don't want a child process to live without the supervisor. Usually, supervisor waits for child forever and retransmits termination signals. But if the parent is killed with a SIGKILL there's no way to pass anything. This patch supplies a child process with a `supervisor_fuse` fiber. It tries to read from a pipe (that supervisor never writes to), and if the writing end is closed, it means the supervisor has terminated. In this case, child process terminates too. Part of https://git.picodata.io/picodata/picodata/picodata/-/issues/56
-
Yaroslav Dynnikov authored
This patch reduces the variable passing trace length. Instead of returning it from function to function, call `exit()` in place. The trace of exit code before the patch: ``` exit() <- main <- main_run <- fork(child) <- tarantool_main ``` And now: ``` exit() <- tarantool_main ``` Type safety is ensured at comilation time by using `!` type for `fn main()`. See https://doc.rust-lang.org/reference/types/never.html