[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 13/25] Add a mutex to guarantee single writer to qemu_logfile hand
From: |
Alex Bennée |
Subject: |
[PULL 13/25] Add a mutex to guarantee single writer to qemu_logfile handle. |
Date: |
Thu, 19 Dec 2019 10:49:22 +0000 |
From: Robert Foley <address@hidden>
Also added qemu_logfile_init() for initializing the logfile mutex.
Note that inside qemu_set_log() we needed to add a pair of
qemu_mutex_unlock() calls in order to avoid a double lock in
qemu_log_close(). This unavoidable temporary ugliness will be
cleaned up in a later patch in this series.
Signed-off-by: Robert Foley <address@hidden>
Reviewed-by: Alex Bennée <address@hidden>
Signed-off-by: Alex Bennée <address@hidden>
Message-Id: <address@hidden>
diff --git a/util/log.c b/util/log.c
index 417d16ec66e..953a66b5a8d 100644
--- a/util/log.c
+++ b/util/log.c
@@ -24,8 +24,10 @@
#include "qapi/error.h"
#include "qemu/cutils.h"
#include "trace/control.h"
+#include "qemu/thread.h"
static char *logfilename;
+static QemuMutex qemu_logfile_mutex;
FILE *qemu_logfile;
int qemu_loglevel;
static int log_append = 0;
@@ -49,6 +51,11 @@ int qemu_log(const char *fmt, ...)
return ret;
}
+static void __attribute__((__constructor__)) qemu_logfile_init(void)
+{
+ qemu_mutex_init(&qemu_logfile_mutex);
+}
+
static bool log_uses_own_buffers;
/* enable or disable low levels log */
@@ -70,7 +77,9 @@ void qemu_set_log(int log_flags)
if (qemu_loglevel && (!is_daemonized() || logfilename)) {
need_to_open_file = true;
}
+ qemu_mutex_lock(&qemu_logfile_mutex);
if (qemu_logfile && !need_to_open_file) {
+ qemu_mutex_unlock(&qemu_logfile_mutex);
qemu_log_close();
} else if (!qemu_logfile && need_to_open_file) {
if (logfilename) {
@@ -105,6 +114,7 @@ void qemu_set_log(int log_flags)
#endif
log_append = 1;
}
+ qemu_mutex_unlock(&qemu_logfile_mutex);
}
}
@@ -240,12 +250,14 @@ void qemu_log_flush(void)
/* Close the log file */
void qemu_log_close(void)
{
+ qemu_mutex_lock(&qemu_logfile_mutex);
if (qemu_logfile) {
if (qemu_logfile != stderr) {
fclose(qemu_logfile);
}
qemu_logfile = NULL;
}
+ qemu_mutex_unlock(&qemu_logfile_mutex);
}
const QEMULogItem qemu_log_items[] = {
--
2.20.1
- [PULL 02/25] tests/vm: Allow to set qemu-img path, (continued)
- [PULL 02/25] tests/vm: Allow to set qemu-img path, Alex Bennée, 2019/12/19
- [PULL 04/25] iotests: Provide a function for checking the creation of huge files, Alex Bennée, 2019/12/19
- [PULL 05/25] iotests: Skip test 060 if it is not possible to create large files, Alex Bennée, 2019/12/19
- [PULL 06/25] iotests: Skip test 079 if it is not possible to create large files, Alex Bennée, 2019/12/19
- [PULL 08/25] tests/test-util-filemonitor: Skip test on non-x86 Travis containers, Alex Bennée, 2019/12/19
- [PULL 09/25] travis.yml: Enable builds on arm64, ppc64le and s390x, Alex Bennée, 2019/12/19
- [PULL 07/25] tests/hd-geo-test: Skip test when images can not be created, Alex Bennée, 2019/12/19
- [PULL 10/25] ci: build out-of-tree, Alex Bennée, 2019/12/19
- [PULL 11/25] Fix double free issue in qemu_set_log_filename()., Alex Bennée, 2019/12/19
- [PULL 12/25] Cleaned up flow of code in qemu_set_log(), to simplify and clarify., Alex Bennée, 2019/12/19
- [PULL 13/25] Add a mutex to guarantee single writer to qemu_logfile handle.,
Alex Bennée <=
- [PULL 18/25] travis.yml: Remove the redundant clang-with-MAIN_SOFTMMU_TARGETS entry, Alex Bennée, 2019/12/19
- [PULL 21/25] linux-user: add target_mmap_complete tracepoint, Alex Bennée, 2019/12/19
- [PULL 15/25] Add use of RCU for qemu_logfile., Alex Bennée, 2019/12/19
- [PULL 20/25] linux-user: convert target_mmap debug to tracepoint, Alex Bennée, 2019/12/19
- [PULL 17/25] docker: gtester is no longer used, Alex Bennée, 2019/12/19
- [PULL 19/25] linux-user: convert target_mprotect debug to tracepoint, Alex Bennée, 2019/12/19
- [PULL 16/25] Added tests for close and change of logfile., Alex Bennée, 2019/12/19
- [PULL 25/25] tests/tcg: ensure we re-configure if configure.sh is updated, Alex Bennée, 2019/12/19
- [PULL 24/25] trace: replace hand-crafted pattern_glob with g_pattern_match_simple, Alex Bennée, 2019/12/19
- [PULL 23/25] linux-user: convert target_munmap debug to a tracepoint, Alex Bennée, 2019/12/19