util/log: do not close and reopen log files when flags are turned off
commit59bde2137445b63c822720d069d91d38190c6540
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 8 Nov 2022 14:00:31 +0000 (8 15:00 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 5 Jan 2023 23:50:32 +0000 (6 00:50 +0100)
treeb3bd8234c8d85b15f45e3dac47f2475f657ab30b
parentcc6ff741123216550997b12cdd991beeed47bd0d
util/log: do not close and reopen log files when flags are turned off

log_append makes sure that if you turn off the logging (which clears
log_flags and makes need_to_open_file false) the old log is not
overwritten.  The usecase is that if you remove or move the file
QEMU will not keep writing to the old file.  However, this is
not always the desited behavior, in particular having log_append==1
after changing the file name makes little sense.

When qemu_set_log_internal is called from the logfile monitor
command, filename must be non-NULL and therefore changed_name must
be true.  Therefore, the only case where the file is closed and
need_to_open_file == false is indeed when log_flags becomes
zero.  In this case, just flush the file and do not bother
closing it, thus faking the same append behavior as previously.

The behavioral change is that changing the logfile twice, for
example log1 -> log2 -> log1, will cause log1 to be overwritten.
This can simply be documented, since it is not a particularly
surprising behavior.

Suggested-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
Message-Id: <20221025092119.236224-1-pbonzini@redhat.com>
[groug: nullify global_file before actually closing the file]
Signed-off-by: Greg Kurz <groug@kaod.org>
Message-Id: <20221108140032.1460307-2-groug@kaod.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
util/log.c