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>
if (monitor_cur_is_qmp()) {
cur = NULL;
}
+ if (!cur) {
+ qemu_flockfile(stderr);
+ }
if (message_with_timestamp && !cur) {
timestr = real_time_iso8601();
error_vprintf_mon(cur, fmt, ap);
error_printf_mon(cur, "\n");
+
+ if (!cur) {
+ qemu_funlockfile(stderr);
+ }
}
/*