On Thu, Sep 25, 2025 at 10:44:27AM +0100, Daniel P. Berrangé wrote:
> This addresses two key gotchas with the logging APIs:
> 
>  * Safely outputting a single line of text using
>    multiple qemu_log() calls requires use of the
>    qemu_log_trylock/unlock functions to avoid
>    interleaving between threads
> 
>  * Directly outputting to the FILE object returned
>    by qemu_log_trylock() must be discouraged because
>    it prevents the inclusion of configured log message
>    prefixes.
> 
> Reported-by: Markus Armbruster <arm...@redhat.com>
> Signed-off-by: Daniel P. Berrangé <berra...@redhat.com>
> ---

> +++ b/include/qemu/log-for-trace.h
> @@ -29,7 +29,40 @@ static inline bool qemu_loglevel_mask(int mask)
>      return (qemu_loglevel & mask) != 0;
>  }
>  
> -/* main logging function */
> +/**
> + * qemu_log: report a log message

> + *
> + * The FILE object returned by qemu_log_trylock() does
> + * not need to be used for outputting text directly,
> + * it is merely used to associate the lock.
> + *
> + *    FILE *f = qemu_log_trylock()
> + *
> + *    qemu_log("Something");
> + *    qemu_log("Something");
> + *    qemu_log("Something");
> + *    qemu_log("The end\n");
> + *
> + *    qemu_log_unlock(f);

Should this example include spaces, as in qemu_log("Something ");, so
that copy-and-paste coding is less likely to
ResultInCompressedSentences across the log calls?

Adjusting a comment is trivial, so:

Reviewed-by: Eric Blake <ebl...@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.
Virtualization:  qemu.org | libguestfs.org

Reply via email to