[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [Qemu-devel] [PATCH] Correct win32 timers deleting v.3
From: |
Pavel Dovgaluk |
Subject: |
RE: [Qemu-devel] [PATCH] Correct win32 timers deleting v.3 |
Date: |
Wed, 2 Feb 2011 14:59:51 +0300 |
Hello.
Anybody interested in this patch?
Pavel Dovgaluk
> -----Original Message-----
> From: address@hidden [mailto:qemu-
> address@hidden On Behalf Of Pavel
> Dovgaluk
> Sent: Wednesday, January 26, 2011 11:06 AM
> To: address@hidden
> Subject: [Qemu-devel] [PATCH] Correct win32 timers deleting v.3
>
> 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.
>
> v.3: Fixed all the issues found in previous messages with patch.
>
> Signed-off-by: Pavel Dovgalyuk <address@hidden>
> ---
> 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;
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- RE: [Qemu-devel] [PATCH] Correct win32 timers deleting v.3,
Pavel Dovgaluk <=