From 1ee73216f4ccd2f3b6eb818feb165b3cf5a1944c Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 22 Sep 2016 15:17:10 -0700 Subject: log: Add locking to large logging blocks Reuse the existing locking provided by stdio to keep in_asm, cpu, op, op_opt, op_ind, and out_asm as contiguous blocks. While it isn't possible to interleave e.g. in_asm or op_opt logs because of the TB lock protecting all code generation, it is possible to interleave cpu logs, or to interleave a cpu dump with an out_asm dump. For mingw32, we appear to have no viable solution for this. The locking functions are not properly exported from the system runtime library. Reviewed-by: Paolo Bonzini Signed-off-by: Richard Henderson --- include/qemu/log.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'include/qemu') diff --git a/include/qemu/log.h b/include/qemu/log.h index 00bf37f..a50e994 100644 --- a/include/qemu/log.h +++ b/include/qemu/log.h @@ -51,6 +51,22 @@ static inline bool qemu_loglevel_mask(int mask) return (qemu_loglevel & mask) != 0; } +/* Lock output for a series of related logs. Since this is not needed + * for a single qemu_log / qemu_log_mask / qemu_log_mask_and_addr, we + * assume that qemu_loglevel_mask has already been tested, and that + * qemu_loglevel is never set when qemu_logfile is unset. + */ + +static inline void qemu_log_lock(void) +{ + qemu_flockfile(qemu_logfile); +} + +static inline void qemu_log_unlock(void) +{ + qemu_funlockfile(qemu_logfile); +} + /* Logging functions: */ /* main logging function -- cgit v1.1