mirror of
https://github.com/qemu/qemu.git
synced 2026-04-05 22:00:58 +00:00
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>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user