|
@@ -742,6 +742,17 @@ static void quit_timers(void)
|
|
|
t->stop(t);
|
|
|
}
|
|
|
|
|
|
+static void reinit_timers(void)
|
|
|
+{
|
|
|
+ struct qemu_alarm_timer *t = alarm_timer;
|
|
|
+ t->stop(t);
|
|
|
+ if (t->start(t)) {
|
|
|
+ fprintf(stderr, "Internal timer error: aborting\n");
|
|
|
+ exit(1);
|
|
|
+ }
|
|
|
+ qemu_rearm_alarm_timer(t);
|
|
|
+}
|
|
|
+
|
|
|
int init_timer_alarm(void)
|
|
|
{
|
|
|
struct qemu_alarm_timer *t = NULL;
|
|
@@ -765,6 +776,9 @@ int init_timer_alarm(void)
|
|
|
}
|
|
|
|
|
|
atexit(quit_timers);
|
|
|
+#ifdef CONFIG_POSIX
|
|
|
+ pthread_atfork(NULL, NULL, reinit_timers);
|
|
|
+#endif
|
|
|
alarm_timer = t;
|
|
|
return 0;
|
|
|
|