Browse Source

util: fix interleaving of error prefixes

The vreport() function will optionally emit an prefix for error
messages which is output to stderr incrementally. In the event
that two vreport() calls execute concurrently, there is a risk
that the prefix output will interleave. To address this it is
required to take a lock on 'stderr' when outputting errors.

Reported-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
master
Daniel P. Berrangé 11 months ago
parent
commit
13bedeb212
  1. 7
      util/error-report.c

7
util/error-report.c

@ -233,6 +233,9 @@ static void vreport(report_type type, const char *fmt, va_list ap)
if (monitor_cur_is_qmp()) {
cur = NULL;
}
if (!cur) {
qemu_flockfile(stderr);
}
if (message_with_timestamp && !cur) {
timestr = real_time_iso8601();
@ -260,6 +263,10 @@ static void vreport(report_type type, const char *fmt, va_list ap)
error_vprintf_mon(cur, fmt, ap);
error_printf_mon(cur, "\n");
if (!cur) {
qemu_funlockfile(stderr);
}
}
/*

Loading…
Cancel
Save