util/log: Ignore per-thread flag if global file already there
commit524fc737431d240f9d9f10aaf381003092868bac
authorGreg Kurz <groug@kaod.org>
Fri, 4 Nov 2022 12:00:59 +0000 (4 13:00 +0100)
committerStefan Hajnoczi <stefanha@redhat.com>
Mon, 7 Nov 2022 21:00:02 +0000 (7 16:00 -0500)
tree080d204640463f8116bf50233a308cc5f337b66e
parent479b350ebf08248eb7729a02a07ddfe7a7c65e44
util/log: Ignore per-thread flag if global file already there

If QEMU is started with `-D qemu.log.%d` without any `-d` option,
doing `log all` in the monitor fails with:

Filename template with '%d' required for 'tid'

It is confusing since '%d' was actually passed.

This happens because QEMU caches the log file name with %d converted
to getpid() since `tid` wasn't required. This name isn't suitable
for a subsequent enablement of per-thread logs. There's little cause
to change the behavior as `-d tid` is mostly used at user-only startup.

Drop the per-thread from the requested flags in this case : `log all`
will thus enable everything except `tid` instead of failing. This is
preferable over forcing the user to enable each log item individually.

With this patch, `tid` is now truely immutable : it can only be set
or unset from the command line and never changed afterwards.

Fixes: 4e51069d6793 ("util/log: Support per-thread log files")
Cc: richard.henderson@linaro.org
Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20221104120059.678470-3-groug@kaod.org
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
util/log.c