[PATCH] getty: Wait until all output written to stdout has beentransmitted
jcathey at ciena.com
Mon Jan 24 17:11:15 UTC 2011
>> + /* Wait up to 5 seconds for the output buffer to drain */
>> + signal(SIGALRM, record_signo);
>> + alarm(5);
>> + tcdrain(STDIN_FILENO);
>> + alarm(0);
>> + signal(SIGALRM, SIG_DFL);
>How does this work? Normally plain signal sets SA_RESTART and won't be
>interrupting. You need sigaction without SA_RESTART, or the BB
>wrapper, to get the interrupting behavior that's desired. Was this
Perhaps I missed something, but wasn't the purpose to ensure the
flush happened before the program exited? In that case, wouldn't:
tcdrain(STDOUT_FILENO); // Stdout, not stdin, isn't it?
do it? Restart bits don't matter if you're not coming back.
There is no recovery strategy for the tcdrain anyway. All signals
_are_ interrupting, you _will_ take the signal no matter where
you are in the flow of execution.
Or is all this just before closing the transmitting fd,
but _not_ exiting? In which case what happens after the
alarm signal hits _does_ matter?
More information about the busybox