From patchwork Sat Oct 27 12:15:32 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Tokarev X-Patchwork-Id: 194613 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 30F4D2C009B for ; Sat, 27 Oct 2012 23:15:50 +1100 (EST) Received: from localhost ([::1]:52837 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TS5Ip-0001FT-S0 for incoming@patchwork.ozlabs.org; Sat, 27 Oct 2012 08:15:47 -0400 Received: from eggs.gnu.org ([208.118.235.92]:38212) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TS5Ig-0001FI-RW for qemu-devel@nongnu.org; Sat, 27 Oct 2012 08:15:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TS5If-0005Ef-39 for qemu-devel@nongnu.org; Sat, 27 Oct 2012 08:15:38 -0400 Received: from isrv.corpit.ru ([86.62.121.231]:34928) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TS5Ie-0005ES-NJ for qemu-devel@nongnu.org; Sat, 27 Oct 2012 08:15:37 -0400 Received: from [192.168.88.2] (mjt.vpn.tls.msk.ru [192.168.177.99]) by isrv.corpit.ru (Postfix) with ESMTP id 0EAE8A1F32; Sat, 27 Oct 2012 16:15:33 +0400 (MSK) Message-ID: <508BD064.9080505@msgid.tls.msk.ru> Date: Sat, 27 Oct 2012 16:15:32 +0400 From: Michael Tokarev Organization: Telecom Service, JSC User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.9) Gecko/20121015 Icedove/10.0.9 MIME-Version: 1.0 To: Peter Maydell References: <1348584532-21914-1-git-send-email-mjt@msgid.tls.msk.ru> <876271ol4w.fsf@codemonkey.ws> <5062AA0C.60303@msgid.tls.msk.ru> <5062BA23.705@msgid.tls.msk.ru> <87ehloj3rr.fsf@codemonkey.ws> <50631789.8040209@msgid.tls.msk.ru> <508BC420.8000202@msgid.tls.msk.ru> In-Reply-To: X-Enigmail-Version: 1.4.1 OpenPGP: id=804465C5 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 86.62.121.231 Cc: Stefan Hajnoczi , Hitoshi Mitake , qemu-devel@nongnu.org, Anthony Liguori Subject: Re: [Qemu-devel] [PATCH v2] stop using stdio for monitor/serial/etc with -daemonize 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org On 27.10.2012 15:33, Peter Maydell wrote: > On 27 October 2012 12:23, Michael Tokarev wrote: >> >> I still don't see why >> >> -nographic -daemonize >> >> makes no sence while >> >> -curses -daemonize >> >> does? > > My vote is that neither of these combinations makes sense. I agree. Well, almost -- to me, -curses -daemonize makes much less sence than -nographic -daemonize - at least when you think about it, ie, when you rely on common sense. When you look at the docs, it becomes apparent that -nographic does something else when you thought it is, and so both becomes equally non-sentical. Actually I wanted to error out on -nographic -daemonize (it is "my" bug), but after seeing 995ee2bf469de6bbe5ce133ec853392b2a4ce34c (which is the "fix" for -curses -daemonize), I decided to fix it as well. So, maybe we should fix both by disallowing both combinations? Like the attached patch does? I'd rather have -nographic work with -daemonize, since the alternative - shown in the patch comment - is rather long and it is easy to forget to "nullify" some option, while -nographic can do that easy and it is convinient, but if people dislikes such natural and easy-for-the-user solutions, I wont insist. Note that the actual outcome of both is the same -- after using either of the two combination (without the above-mentioned fix), the terminal switches to raw mode and little can be done with it. It is a real PITA that these rather trivial things require so much discussing and stays known but unfixed for so long, and much more important things gets less time and energy as the result. /mjt From 09808040ef70f62f0ffefae3a95e0d0fc7ef09a5 Mon Sep 17 00:00:00 2001 From: Michael Tokarev Date: Sat, 27 Oct 2012 16:03:34 +0400 Subject: [PATCH] disallow -daemonize with curses display or -nographic Curses display requires stdin/out to stay on the terminal, so -daemonize makes no sense in this case. Instead of leaving display uninitialized like is done since 995ee2bf469de6bb, explicitly detect this case earlier and error out. -nographic can actually be used with -daemonize, by redirecting everything to a null device, but the problem is that according to documentation and historical behavour, -nographic redirects guest ports to stdin/out, which, again, makes no sense in case of -daemonize. Since -nographic is a legacy option, don't bother fixing this case (to allow -nographic and -daemonize by redirecting guest ports to null instead of stdin/out in this case), but disallow it completely instead, to stop garbling host terminal. If no display display needed and user wants to use -nographic, the right way to go is to use -serial null -parallel null -monitor none -display none -vga none instead of -nographic. Signed-off-by: Michael Tokarev --- vl.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/vl.c b/vl.c index 9f99ef4..db48d62 100644 --- a/vl.c +++ b/vl.c @@ -3413,6 +3413,26 @@ int main(int argc, char **argv, char **envp) default_sdcard = 0; } + if (is_daemonized()) { + /* According to documentation and historically, -nographic redirects + * serial port, parallel port and monitor to stdio, which does not work + * with -daemonize. We can redirect these to null instead, but since + * -nographic is legacy, let's just error out. + */ + if (display_type == DT_NOGRAPHIC + /* && (default_parallel || default_serial + || default_monitor || default_virtcon) */) { + fprintf(stderr, "-nographic can not be used with -daemonize\n"); + exit(1); + } +#ifdef CONFIG_CURSES + if (display_type == DT_CURSES) { + fprintf(stderr, "curses display can not be used with -daemonize\n"); + exit(1); + } +#endif + } + if (display_type == DT_NOGRAPHIC) { if (default_parallel) add_device_config(DEV_PARALLEL, "null"); @@ -3687,9 +3707,7 @@ int main(int argc, char **argv, char **envp) break; #if defined(CONFIG_CURSES) case DT_CURSES: - if (!is_daemonized()) { - curses_display_init(ds, full_screen); - } + curses_display_init(ds, full_screen); break; #endif #if defined(CONFIG_SDL) -- 1.7.10.4