From patchwork Wed Jul 1 11:47:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Patchwork-Id: 490082 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id BA0791402B3 for ; Wed, 1 Jul 2015 21:49:23 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=HWZHQZzu; dkim-atps=neutral Received: from localhost ([::1]:57379 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZAGW1-0008R5-VG for incoming@patchwork.ozlabs.org; Wed, 01 Jul 2015 07:49:22 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54875) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZAGVH-0007AD-AX for qemu-devel@nongnu.org; Wed, 01 Jul 2015 07:48:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZAGVF-0005Od-1w for qemu-devel@nongnu.org; Wed, 01 Jul 2015 07:48:35 -0400 Received: from mail-qk0-x22b.google.com ([2607:f8b0:400d:c09::22b]:33202) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZAGVE-0005OP-Sj for qemu-devel@nongnu.org; Wed, 01 Jul 2015 07:48:32 -0400 Received: by qkhu186 with SMTP id u186so27012347qkh.0 for ; Wed, 01 Jul 2015 04:48:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=C0mI8fx5WnNk+OuiV+vnUjVapgSebSwyvvptea2y+GY=; b=HWZHQZzulYb0+B9zLEh41ecnIW+nmIbtI2WdU+mIgUniTd3okR2a+raVPnXObHJYQ1 O2OrmEjQRP6Exq39OTr8hxDghPpxhrS4QcgdkkrBC4EFnz3UqxPSsRWWIHWIna5qRoJE 9r4UX7+nlNW3cRhGojlpm+26b5QdwWjZsmJQ6egCfLAlISwix6cE7gw0k1t9CsPMTWw9 n1NCFQhPZUCEzp6Moa9oUeKykz0QueBoxsBzC+bYUexty7ttwOiZJXWdnV7WaFAAmQQ2 8eVwjPnil0EvuHpguezeUUJj3HgYIaR9vL0ZrPa6aq4D7CwMFzSBoxL2uyzL8DkcFPrY aOoA== X-Received: by 10.140.106.101 with SMTP id d92mr32253908qgf.70.1435751312506; Wed, 01 Jul 2015 04:48:32 -0700 (PDT) Received: from localhost (bne75-h02-31-39-163-232.dsl.sta.abo.bbox.fr. [31.39.163.232]) by mx.google.com with ESMTPSA id i7sm790828qge.32.2015.07.01.04.48.31 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 Jul 2015 04:48:31 -0700 (PDT) From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= To: qemu-devel@nongnu.org Date: Wed, 1 Jul 2015 13:47:43 +0200 Message-Id: <1435751267-26378-9-git-send-email-marcandre.lureau@gmail.com> X-Mailer: git-send-email 2.4.3 In-Reply-To: <1435751267-26378-1-git-send-email-marcandre.lureau@gmail.com> References: <1435751267-26378-1-git-send-email-marcandre.lureau@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400d:c09::22b Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , mdroth@linux.vnet.ibm.com Subject: [Qemu-devel] [PATCH 08/12] qga: move agent run in a seperate function 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 Once the options are populated, move the running state to a run_agent() function. Signed-off-by: Marc-André Lureau --- qga/main.c | 123 +++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 67 insertions(+), 56 deletions(-) diff --git a/qga/main.c b/qga/main.c index 5575637..aaf0e10 100644 --- a/qga/main.c +++ b/qga/main.c @@ -1042,39 +1042,13 @@ static void option_parse(int argc, char **argv) } } -int main(int argc, char **argv) +static int run_agent(GAState *s) { - GAState *s; - - module_call_init(MODULE_INIT_QAPI); - - init_dfl_pathnames(); - option_parse(argc, argv); - - if (pid_filepath == NULL) { - pid_filepath = g_strdup(dfl_pathnames.pidfile); - } - - if (state_dir == NULL) { - state_dir = g_strdup(dfl_pathnames.state_dir); - } - - if (method == NULL) { - method = g_strdup("virtio-serial"); - } + ga_state = s; - if (device_path == NULL) { - if (strcmp(method, "virtio-serial") == 0) { - /* try the default path for the virtio-serial port */ - device_path = g_strdup(QGA_VIRTIO_PATH_DEFAULT); - } else if (strcmp(method, "isa-serial") == 0) { - /* try the default path for the serial port - COM1 */ - device_path = g_strdup(QGA_SERIAL_PATH_DEFAULT); - } else { - g_critical("must specify a path for this channel"); - goto out_bad; - } - } + g_log_set_default_handler(ga_log, s); + g_log_set_fatal_mask(NULL, G_LOG_LEVEL_ERROR); + ga_enable_logging(s); #ifdef _WIN32 /* On win32 the state directory is application specific (be it the default @@ -1090,20 +1064,6 @@ int main(int argc, char **argv) } #endif - s = g_malloc0(sizeof(GAState)); - s->log_level = log_level; - s->log_file = stderr; -#ifdef CONFIG_FSFREEZE - s->fsfreeze_hook = fsfreeze_hook; -#endif - g_log_set_default_handler(ga_log, s); - g_log_set_fatal_mask(NULL, G_LOG_LEVEL_ERROR); - ga_enable_logging(s); - s->state_filepath_isfrozen = g_strdup_printf("%s/qga.state.isfrozen", - state_dir); - s->pstate_filepath = g_strdup_printf("%s/qga.state", state_dir); - s->frozen = false; - #ifndef _WIN32 /* check if a previous instance of qemu-ga exited with filesystems' state * marked as frozen. this could be a stale value (a non-qemu-ga process @@ -1154,7 +1114,7 @@ int main(int argc, char **argv) if (!log_file) { g_critical("unable to open specified log file: %s", strerror(errno)); - goto out_bad; + return EXIT_FAILURE; } s->log_file = log_file; } @@ -1165,7 +1125,7 @@ int main(int argc, char **argv) s->pstate_filepath, ga_is_frozen(s))) { g_critical("failed to load persistent state"); - goto out_bad; + return EXIT_FAILURE; } blacklist = ga_command_blacklist_init(blacklist); @@ -1185,14 +1145,14 @@ int main(int argc, char **argv) #ifndef _WIN32 if (!register_signal_handlers()) { g_critical("failed to register signal handlers"); - goto out_bad; + return EXIT_FAILURE; } #endif s->main_loop = g_main_loop_new(NULL, false); if (!channel_init(ga_state, method, device_path)) { g_critical("failed to initialize guest agent channel"); - goto out_bad; + return EXIT_FAILURE; } #ifndef _WIN32 g_main_loop_run(ga_state->main_loop); @@ -1206,15 +1166,65 @@ int main(int argc, char **argv) } #endif - ga_command_state_cleanup_all(ga_state->command_state); - ga_channel_free(ga_state->channel); + return EXIT_SUCCESS; +} - if (daemonize) { - unlink(pid_filepath); +int main(int argc, char **argv) +{ + int ret = EXIT_SUCCESS; + GAState *s = g_new0(GAState, 1); + + module_call_init(MODULE_INIT_QAPI); + + init_dfl_pathnames(); + option_parse(argc, argv); + + if (pid_filepath == NULL) { + pid_filepath = g_strdup(dfl_pathnames.pidfile); + } + + if (state_dir == NULL) { + state_dir = g_strdup(dfl_pathnames.state_dir); + } + + if (method == NULL) { + method = g_strdup("virtio-serial"); + } + + if (device_path == NULL) { + if (strcmp(method, "virtio-serial") == 0) { + /* try the default path for the virtio-serial port */ + device_path = g_strdup(QGA_VIRTIO_PATH_DEFAULT); + } else if (strcmp(method, "isa-serial") == 0) { + /* try the default path for the serial port - COM1 */ + device_path = g_strdup(QGA_SERIAL_PATH_DEFAULT); + } else { + g_critical("must specify a path for this channel"); + ret = EXIT_FAILURE; + goto end; + } + } + + s->log_level = log_level; + s->log_file = stderr; +#ifdef CONFIG_FSFREEZE + s->fsfreeze_hook = fsfreeze_hook; +#endif + s->state_filepath_isfrozen = g_strdup_printf("%s/qga.state.isfrozen", + state_dir); + s->pstate_filepath = g_strdup_printf("%s/qga.state", state_dir); + s->frozen = false; + + ret = run_agent(s); + +end: + if (s->command_state) { + ga_command_state_cleanup_all(s->command_state); + } + if (s->channel) { + ga_channel_free(s->channel); } - return 0; -out_bad: if (daemonize) { unlink(pid_filepath); } @@ -1227,6 +1237,7 @@ out_bad: #ifdef CONFIG_FSFREEZE g_free(fsfreeze_hook); #endif + g_free(s); - return EXIT_FAILURE; + return ret; }