From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57033) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abTc2-0007Jo-JL for qemu-devel@nongnu.org; Thu, 03 Mar 2016 08:48:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1abTby-0006Bk-Bd for qemu-devel@nongnu.org; Thu, 03 Mar 2016 08:48:18 -0500 Received: from mailhub.sw.ru ([195.214.232.25]:31800 helo=relay.sw.ru) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abTbx-0006Bg-V7 for qemu-devel@nongnu.org; Thu, 03 Mar 2016 08:48:14 -0500 From: "Denis V. Lunev" Date: Thu, 3 Mar 2016 16:48:06 +0300 Message-Id: <1457012886-7626-1-git-send-email-den@openvz.org> Subject: [Qemu-devel] [PATCH 1/1] log: fix hanged connect from virt-manager to libvirt List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Denis V. Lunev" , Paolo Bonzini , Vladimir Sementsov-Ogievskiy , qemu-devel@nongnu.org, Dimitris Aragiorgis libvirt in this case spawns /usr/bin/qemu-system-x86_64 -S -no-user-config -nodefaults -nographic -M none -qmp unix:/var/lib/libvirt/qemu/capabilities.monitor.sock,server,nowait -pidfile /var/lib/libvirt/qemu/capabilities.pidfile -daemonize and with CONFIG_TRACE_LOG this process hangs as stderr becomes redirected to terminal (qemu_logfile == stderr). We do not have redirection to /dev/null in this case which is necessary. Broken by: commit 96c33a4523ee1abe382ce4ff3e82b90ba78aa186 Author: Dimitris Aragiorgis Date: Thu Feb 18 13:38:38 2016 +0200 log: Redirect stderr to logfile if deamonized We should also take into account log filename change in runtime through QMP/HMP, when the log could be even closed. In this case stderr should be tweaked accordingly. Signed-off-by: Denis V. Lunev CC: Dimitris Aragiorgis CC: Paolo Bonzini CC: Vladimir Sementsov-Ogievskiy --- include/qemu/log.h | 4 ++++ os-posix.c | 2 +- util/log.c | 7 ++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/qemu/log.h b/include/qemu/log.h index dda65fd..8083f82 100644 --- a/include/qemu/log.h +++ b/include/qemu/log.h @@ -92,6 +92,10 @@ static inline void qemu_log_close(void) } qemu_logfile = NULL; } + + if (is_daemonized()) { + dup2(STDOUT_FILENO, STDERR_FILENO); /* dup /dev/null to stderr */ + } } /* define log items */ diff --git a/os-posix.c b/os-posix.c index 92fa3ba..d4b2a91 100644 --- a/os-posix.c +++ b/os-posix.c @@ -277,7 +277,7 @@ void os_setup_post(void) dup2(fd, 0); dup2(fd, 1); /* In case -D is given do not redirect stderr to /dev/null */ - if (!qemu_logfile) { + if (!qemu_logfile || qemu_logfile == stderr) { dup2(fd, 2); } diff --git a/util/log.c b/util/log.c index a7ddc7e..a06aa14 100644 --- a/util/log.c +++ b/util/log.c @@ -56,7 +56,7 @@ void do_qemu_set_log(int log_flags, bool use_own_buffers) #ifdef CONFIG_TRACE_LOG qemu_loglevel |= LOG_TRACE; #endif - if ((qemu_loglevel || is_daemonized()) && !qemu_logfile) { + if (qemu_loglevel && !qemu_logfile) { if (logfilename) { qemu_logfile = fopen(logfilename, log_append ? "a" : "w"); if (!qemu_logfile) { @@ -66,9 +66,6 @@ void do_qemu_set_log(int log_flags, bool use_own_buffers) /* In case we are a daemon redirect stderr to logfile */ if (is_daemonized()) { dup2(fileno(qemu_logfile), STDERR_FILENO); - fclose(qemu_logfile); - /* This will skip closing logfile in qemu_log_close() */ - qemu_logfile = stderr; } } else { /* Default to stderr if no log file specified */ @@ -89,7 +86,7 @@ void do_qemu_set_log(int log_flags, bool use_own_buffers) log_append = 1; } } - if (!qemu_loglevel && !is_daemonized() && qemu_logfile) { + if (!qemu_loglevel && qemu_logfile) { qemu_log_close(); } } -- 2.5.0