This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] abort: Only flush file-based stdio streams before termination
On 08/17/2017 11:52 AM, Florian Weimer wrote:
> On 08/17/2017 05:31 PM, Carlos O'Donell wrote:
>
>> I'm OK with this change if we clearly document what we're doing in the
>> glibc manual, and explain the alternative solution of flushing from the
>> abort handler.
>
> The manual currently does not list abort as an action which flushes any
> buffers:
>
> <http://www.gnu.org/software/libc/manual/html_node/Flushing-Buffers.html>
>
> I think you are making up an implementation constraint which does not
> actually exist.
Past behaviour is indeed an implementation constraint, if after a long
enough time, everyone expects it to be that way. Worse I would say that
by flushing buffers we have made an implementation-dependent decision
to do so.
We should document it because C11 leaves it up to the implementation to
decide on this behaviour:
C11 7.22.4.1.2
Whether open streams with unwritten buffered data are flushed, open streams
are closed, or temporary files are removed is implementation-defined.
> What I'm trying to do is to get rid of the flushing (to get a cleaner
> process termination sequence) while preserving the legacy behavior that
> stdout/stderr and other file buffers are flushed on termination because
> that's easily user-visible. Considering that flushing streams which are
> not file-backed can allocate memory using malloc and that abort can be
> called from all kinds of contexts (including malloc itself), I think
> that's a reasonable precaution.
I think we both in general agree on the strategy we're taking, but I'm
arguing that if we flush anything, then we need to be more conservative.
It's easier to argue we won't flush anything and then document that.
--
Cheers,
Carlos.