@@ -105,8 +105,7 @@ static void
105105elog_internal (int elevel ,const char * fmt ,va_list args )
106106{
107107bool wrote_to_file = false,
108- write_to_error_log ,
109- write_to_stderr ;
108+ write_to_error_log ;
110109va_list error_args ,
111110std_args ;
112111
@@ -119,6 +118,9 @@ elog_internal(int elevel, const char *fmt, va_list args)
119118/* We need copy args only if we need write to error log file */
120119if (write_to_error_log )
121120va_copy (error_args ,args );
121+ /* We need copy args only if we need write to stderr */
122+ if (elevel >=ERROR || !(log_filename && !logging_to_file ))
123+ va_copy (std_args ,args );
122124
123125/*
124126 * Write message to log file.
@@ -142,15 +144,6 @@ elog_internal(int elevel, const char *fmt, va_list args)
142144wrote_to_file = true;
143145}
144146
145- /*
146- * Write to stderr if the message was not written to log file.
147- * Write to stderr if the message level is greater than WARNING anyway.
148- */
149- write_to_stderr = !wrote_to_file || elevel >=ERROR ;
150- /* We need copy args only if we need write to stderr */
151- if (write_to_stderr )
152- va_copy (std_args ,error_args );
153-
154147/*
155148 * Write error message to error log file.
156149 * Do not write to file if this error was raised during write previous
@@ -173,7 +166,11 @@ elog_internal(int elevel, const char *fmt, va_list args)
173166va_end (error_args );
174167}
175168
176- if (write_to_stderr )
169+ /*
170+ * Write to stderr if the message was not written to log file.
171+ * Write to stderr if the message level is greater than WARNING anyway.
172+ */
173+ if (!wrote_to_file || elevel >=ERROR )
177174{
178175write_elevel (stderr ,elevel );
179176