[PATCH] Use vectored writes when reporting errors and warnings.

Jerry DeLisle jvdelisle@charter.net
Fri Sep 21 16:37:00 GMT 2018


Janne, this looks OK. Since you are touching on configuration and posix 
dependencies have you tested under any other systems?

Jerry

On 9/21/18 1:41 AM, Janne Blomqvist wrote:
> PING
> 
> On Wed, Sep 12, 2018 at 10:17 PM Janne Blomqvist <blomqvist.janne@gmail.com>
> wrote:
> 
>> When producing error and warning messages, libgfortran writes a
>> message by using many system calls.  By using vectored writes (the
>> POSIX writev function) when available and feasible to use without
>> major surgery, we reduce the chance that output gets intermingled with
>> other output to stderr.
>>
>> In practice, this is done by introducing a new function estr_writev in
>> addition to the existing estr_write.  In order to use this, the old
>> st_vprintf is removed, replaced by direct calls of vsnprintf, allowing
>> more message batching.
>>
>> Regtested on x86_64-pc-linux-gnu, Ok for trunk?
>>
>> libgfortran/ChangeLog:
>>
>> 2018-09-12  Janne Blomqvist  <jb@gcc.gnu.org>
>>
>>          * config.h.in: Regenerated.
>>          * configure: Regenerated.
>>          * configure.ac: Check for writev and sys/uio.h.
>>          * libgfortran.h: Include sys/uio.h.
>>          (st_vprintf): Remove prototype.
>>          (struct iovec): Define if not available.
>>          (estr_writev): New prototype.
>>          * runtime/backtrace.c (error_callback): Use estr_writev.
>>          * runtime/error.c (ST_VPRINTF_SIZE): Remove.
>>          (estr_writev): New function.
>>          (st_vprintf): Remove.
>>          (gf_vsnprintf): New function.
>>          (ST_ERRBUF_SIZE): New macro.
>>          (st_printf): Use vsnprintf.
>>          (os_error): Use estr_writev.
>>          (runtime_error): Use vsnprintf and estr_writev.
>>          (runtime_error_at): Likewise.
>>          (runtime_warning_at): Likewise.
>>          (internal_error): Use estr_writev.
>>          (generate_error_common): Likewise.
>>          (generate_warning): Likewise.
>>          (notify_std): Likewise.
>>          * runtime/pause.c (pause_string): Likewise.
>>          * runtime/stop.c (report_exception): Likewise.
>>          (stop_string): Likewise.
>>          (error_stop_string): Likewise.

--- snip ---



More information about the Fortran mailing list