Hello. Anybody interested in this patch?
Pavel Dovgaluk > -----Original Message----- > From: qemu-devel-bounces+pavel.dovgaluk=ispras...@nongnu.org [mailto:qemu- > devel-bounces+pavel.dovgaluk=ispras...@nongnu.org] On Behalf Of Pavel > Dovgaluk > Sent: Wednesday, January 26, 2011 11:06 AM > To: qemu-devel@nongnu.org > 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 <pavel.dovga...@gmail.com> > --- > 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; >