qemu-devel
[Top][All Lists]
Advanced

[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;
> 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]