>> +    /* 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
>code tested?

Perhaps I missed something, but wasn't the purpose to ensure the
flush happened before the program exited?  In that case, wouldn't:

        signal(SIGALRM, exit);
        alarm(5);
        tcdrain(STDOUT_FILENO); // Stdout, not stdin, isn't it?
        alarm(0);
        signal(SIGALRM, SIG_DFL);

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?

-- Jim




_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to