From patchwork Tue Jan 25 07:23:16 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Dovgalyuk X-Patchwork-Id: 80332 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) by ozlabs.org (Postfix) with ESMTP id A6D501007DA for ; Tue, 25 Jan 2011 18:31:29 +1100 (EST) Received: from localhost ([127.0.0.1]:50567 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PhdHM-0007XH-02 for incoming@patchwork.ozlabs.org; Tue, 25 Jan 2011 02:25:28 -0500 Received: from [140.186.70.92] (port=46151 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PhdGO-0006yq-1x for qemu-devel@nongnu.org; Tue, 25 Jan 2011 02:24:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PhdGM-0002DJ-DA for qemu-devel@nongnu.org; Tue, 25 Jan 2011 02:24:27 -0500 Received: from smtp.ispras.ru ([83.149.198.201]:50920) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PhdGL-0002CE-U2 for qemu-devel@nongnu.org; Tue, 25 Jan 2011 02:24:26 -0500 Received: from PASHAISP (ispserv.ispras.ru [83.149.198.72]) by smtp.ispras.ru (Postfix) with ESMTP id 46D685D4092 for ; Tue, 25 Jan 2011 10:15:28 +0300 (MSK) From: "Pavel Dovgaluk" To: Date: Tue, 25 Jan 2011 10:23:16 +0300 Message-ID: <001801cbbc60$bc0f1b20$342d5160$@Dovgaluk@ispras.ru> MIME-Version: 1.0 X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: Acu8YLvR8cx8lju4R4mVr3ax2AwD6Q== Content-Language: ru X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Subject: [Qemu-devel] [PATCH] Correct win32 timers deleting X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This patch fixes resource leaks caused by quitting qemu with exit() function on win32 host. Timer object should be freed not only at the end of the main function, but by every of the application exits. Signed-off-by: Pavel Dovgalyuk --- qemu-timer.c | 16 +++++++++++++--- vl.c | 1 - 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/qemu-timer.c b/qemu-timer.c index 95814af..86d77a6 100644 --- a/qemu-timer.c +++ b/qemu-timer.c @@ -972,7 +972,10 @@ static int win32_start_timer(struct qemu_alarm_timer *t) timeGetDevCaps(&tc, sizeof(tc)); data->period = tc.wPeriodMin; - timeBeginPeriod(data->period); + if (timeBeginPeriod(data->period) != TIMERR_NOERROR) { + fprintf(stderr, "Failed to initialize win32 alarm timer\n"); + return -1; + } flags = TIME_CALLBACK_FUNCTION; if (alarm_has_dynticks(t)) @@ -990,6 +993,7 @@ static int win32_start_timer(struct qemu_alarm_timer *t) fprintf(stderr, "Failed to initialize win32 alarm timer: %ld\n", GetLastError()); timeEndPeriod(data->period); + data->period = 0; return -1; } @@ -1000,8 +1004,12 @@ static void win32_stop_timer(struct qemu_alarm_timer *t) { struct qemu_alarm_win32 *data = t->priv; - timeKillEvent(data->timerId); - timeEndPeriod(data->period); + if (data->timerId) { + timeKillEvent(data->timerId); + } + if (data->period) { + timeEndPeriod(data->period); + } } static void win32_rearm_timer(struct qemu_alarm_timer *t) @@ -1027,6 +1035,7 @@ static void win32_rearm_timer(struct qemu_alarm_timer *t) GetLastError()); timeEndPeriod(data->period); + data->period = 0; exit(1); } } @@ -1061,6 +1070,7 @@ int init_timer_alarm(void) t->pending = 1; alarm_timer = t; qemu_add_vm_change_state_handler(alarm_timer_on_change_state_rearm, t); + atexit(quit_timers); return 0; diff --git a/vl.c b/vl.c index 0292184..c4b25b0 100644 --- a/vl.c +++ b/vl.c @@ -3118,7 +3118,6 @@ int main(int argc, char **argv, char **envp) os_setup_post(); main_loop(); - quit_timers(); net_cleanup(); return 0;