Skip to content
Snippets Groups Projects
  • Janne Blomqvist's avatar
    edaaef60
    Use vectored writes when reporting errors and warnings. · edaaef60
    Janne Blomqvist authored
    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.
    
    libgfortran/ChangeLog:
    
    2018-09-21  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.
    
    From-SVN: r264487
    edaaef60
    History
    Use vectored writes when reporting errors and warnings.
    Janne Blomqvist authored
    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.
    
    libgfortran/ChangeLog:
    
    2018-09-21  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.
    
    From-SVN: r264487