All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] Correct win32 timers deleting
@ 2011-01-24 14:24 Pavel Dovgaluk
  2011-01-24 17:11 ` Stefan Weil
  0 siblings, 1 reply; 5+ messages in thread
From: Pavel Dovgaluk @ 2011-01-24 14:24 UTC (permalink / raw)
  To: qemu-devel

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 <pavel.dovgaluk@gmail.com>
---
qemu-timer.c |   14 +++++++++++---
 vl.c         |    1 -
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/qemu-timer.c b/qemu-timer.c index 95814af..548f2e5 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,10 @@ 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
+1033,7 @@ static void win32_rearm_timer(struct qemu_alarm_timer *t)
                 GetLastError());
 
         timeEndPeriod(data->period);
+        data->period = 0;
         exit(1);
     }
 }
@@ -1061,6 +1068,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;

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH] Correct win32 timers deleting
  2011-01-24 14:24 [Qemu-devel] [PATCH] Correct win32 timers deleting Pavel Dovgaluk
@ 2011-01-24 17:11 ` Stefan Weil
  2011-01-25  7:43   ` Pavel Dovgaluk
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Weil @ 2011-01-24 17:11 UTC (permalink / raw)
  To: Pavel Dovgaluk; +Cc: qemu-devel

Am 24.01.2011 15:24, schrieb Pavel Dovgaluk:
> 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 <pavel.dovgaluk@gmail.com>
> ---
> qemu-timer.c | 14 +++++++++++---
> vl.c | 1 -
> 2 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/qemu-timer.c b/qemu-timer.c index 95814af..548f2e5 100644
> --- a/qemu-timer.c
> +++ b/qemu-timer.c
> @@ -972,7 +972,10 @@ static int win32_start_timer(struct qemu_alarm_timer
> *t)

Your patch is broken here.

> 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,10 @@ 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);

CODING_STYLE requires {} for both if statements.

> }
>
> static void win32_rearm_timer(struct qemu_alarm_timer *t) @@ -1027,6
> +1033,7 @@ static void win32_rearm_timer(struct qemu_alarm_timer *t)
> GetLastError());
>
> timeEndPeriod(data->period);
> + data->period = 0;
> exit(1);
> }
> }
> @@ -1061,6 +1068,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;


Please check your patch using scripts/checkpatch.pl.

Regards,
Stefan Weil

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [Qemu-devel] [PATCH] Correct win32 timers deleting
  2011-01-24 17:11 ` Stefan Weil
@ 2011-01-25  7:43   ` Pavel Dovgaluk
  0 siblings, 0 replies; 5+ messages in thread
From: Pavel Dovgaluk @ 2011-01-25  7:43 UTC (permalink / raw)
  To: 'Stefan Weil'; +Cc: qemu-devel


> > diff --git a/qemu-timer.c b/qemu-timer.c index 95814af..548f2e5
> 100644
> > --- a/qemu-timer.c
> > +++ b/qemu-timer.c
> > @@ -972,7 +972,10 @@ static int win32_start_timer(struct
> qemu_alarm_timer
> > *t)
> 
> Your patch is broken here.

 I checked the patch file, my "sent items" folder in outlook. This line is
not broken in both places.
 But when I receive my patch from "qemu-devel" list, this line is broken.
 Do you have any ideas about that?

> 
> > - timeKillEvent(data->timerId);
> > - timeEndPeriod(data->period);
> > + if (data->timerId)
> > + timeKillEvent(data->timerId);
> > + if (data->period)
> > + timeEndPeriod(data->period);
> 
> CODING_STYLE requires {} for both if statements.

 Ok, inserted in new version.

> 
> Please check your patch using scripts/checkpatch.pl.
> 

 Now this script says, that patch is ok.


Pavel Dovgaluk

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH] Correct win32 timers deleting
@ 2011-01-25  7:23 Pavel Dovgaluk
  0 siblings, 0 replies; 5+ messages in thread
From: Pavel Dovgaluk @ 2011-01-25  7:23 UTC (permalink / raw)
  To: qemu-devel

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 <pavel.dovgaluk@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;

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH] Correct win32 timers deleting
@ 2011-01-24 14:22 Pavel Dovgaluk
  0 siblings, 0 replies; 5+ messages in thread
From: Pavel Dovgaluk @ 2011-01-24 14:22 UTC (permalink / raw)
  To: qemu-devel

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:
---
qemu-timer.c |   14 +++++++++++---
 vl.c         |    1 -
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/qemu-timer.c b/qemu-timer.c
index 95814af..548f2e5 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,10 @@ 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 +1033,7 @@ static void win32_rearm_timer(struct qemu_alarm_timer
*t)
                 GetLastError());
 
         timeEndPeriod(data->period);
+        data->period = 0;
         exit(1);
     }
 }
@@ -1061,6 +1068,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;

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-01-25  7:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-24 14:24 [Qemu-devel] [PATCH] Correct win32 timers deleting Pavel Dovgaluk
2011-01-24 17:11 ` Stefan Weil
2011-01-25  7:43   ` Pavel Dovgaluk
  -- strict thread matches above, loose matches on Subject: below --
2011-01-25  7:23 Pavel Dovgaluk
2011-01-24 14:22 Pavel Dovgaluk

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.