From patchwork Thu Mar 3 13:48:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Denis V. Lunev" X-Patchwork-Id: 8492751 Return-Path: X-Original-To: patchwork-qemu-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id B133A9F38C for ; Thu, 3 Mar 2016 13:48:28 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0DBD120122 for ; Thu, 3 Mar 2016 13:48:28 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DC81720121 for ; Thu, 3 Mar 2016 13:48:26 +0000 (UTC) Received: from localhost ([::1]:35198 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abTcA-0007Kh-A4 for patchwork-qemu-devel@patchwork.kernel.org; Thu, 03 Mar 2016 08:48:26 -0500 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 Received: from hades.sw.ru ([10.30.8.132]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id u23Dm68R031254; Thu, 3 Mar 2016 16:48:08 +0300 (MSK) From: "Denis V. Lunev" To: Date: Thu, 3 Mar 2016 16:48:06 +0300 Message-Id: <1457012886-7626-1-git-send-email-den@openvz.org> X-Mailer: git-send-email 2.5.0 X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x X-Received-From: 195.214.232.25 Cc: "Denis V. Lunev" , Paolo Bonzini , Vladimir Sementsov-Ogievskiy , qemu-devel@nongnu.org, Dimitris Aragiorgis Subject: [Qemu-devel] [PATCH 1/1] log: fix hanged connect from virt-manager to libvirt X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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(); } }