[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 4/5] util/log: Close per-thread log file on thread termination
From: |
Paolo Bonzini |
Subject: |
[PULL 4/5] util/log: Close per-thread log file on thread termination |
Date: |
Wed, 2 Nov 2022 12:41:24 +0100 |
From: Greg Kurz <groug@kaod.org>
When `-D ${logfile} -d tid` is passed, qemu_log_trylock() creates
a dedicated log file for the current thread and opens it. The
corresponding file descriptor is cached in a __thread variable.
Nothing is done to close the corresponding file descriptor when the
thread terminates though and the file descriptor is leaked.
The issue was found during code inspection and reproduced manually.
Fix that with an atexit notifier.
Fixes: 4e51069d6793 ("util/log: Support per-thread log files")
Cc: richard.henderson@linaro.org
Signed-off-by: Greg Kurz <groug@kaod.org>
Message-Id: <20221021105734.555797-1-groug@kaod.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
util/log.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/util/log.c b/util/log.c
index d6eb0378c3a3..39866bdaf2fa 100644
--- a/util/log.c
+++ b/util/log.c
@@ -42,6 +42,7 @@ static QemuMutex global_mutex;
static char *global_filename;
static FILE *global_file;
static __thread FILE *thread_file;
+static __thread Notifier qemu_log_thread_cleanup_notifier;
int qemu_loglevel;
static bool log_append;
@@ -77,6 +78,12 @@ static int log_thread_id(void)
#endif
}
+static void qemu_log_thread_cleanup(Notifier *n, void *unused)
+{
+ fclose(thread_file);
+ thread_file = NULL;
+}
+
/* Lock/unlock output. */
FILE *qemu_log_trylock(void)
@@ -93,6 +100,8 @@ FILE *qemu_log_trylock(void)
return NULL;
}
thread_file = logfile;
+ qemu_log_thread_cleanup_notifier.notify = qemu_log_thread_cleanup;
+ qemu_thread_atexit_add(&qemu_log_thread_cleanup_notifier);
} else {
rcu_read_lock();
/*
--
2.38.1
- [PULL 0/5] Misc patches for QEMU 7.2 soft freeze, Paolo Bonzini, 2022/11/02
- [PULL 1/5] target/i386: Fix calculation of LOCK NEG eflags, Paolo Bonzini, 2022/11/02
- [PULL 3/5] target/i386: Set maximum APIC ID to KVM prior to vCPU creation, Paolo Bonzini, 2022/11/02
- [PULL 2/5] os-posix: asynchronous teardown for shutdown on Linux, Paolo Bonzini, 2022/11/02
- [PULL 5/5] target/i386: Fix test for paging enabled, Paolo Bonzini, 2022/11/02
- [PULL 4/5] util/log: Close per-thread log file on thread termination,
Paolo Bonzini <=
- Re: [PULL 0/5] Misc patches for QEMU 7.2 soft freeze, Bin Meng, 2022/11/02
- Re: [PULL 0/5] Misc patches for QEMU 7.2 soft freeze, Stefan Hajnoczi, 2022/11/03