diff --git a/src/include/86box/timer.h b/src/include/86box/timer.h index 8e4adf80d..16f36b129 100644 --- a/src/include/86box/timer.h +++ b/src/include/86box/timer.h @@ -7,6 +7,8 @@ #define MAX_USEC64 1000000ULL #define MAX_USEC 1000000.0 +#define TIMER_PROCESS 8 +#define TIMER_ENABLE 4 #define TIMER_SPLIT 2 #define TIMER_ENABLED 1 @@ -211,13 +213,17 @@ timer_process_inline(void) timer_head->prev = NULL; timer->next = timer->prev = NULL; + timer->flags |= TIMER_PROCESS; if (timer->flags & TIMER_SPLIT) timer_advance_ex(timer, 0); /* We're splitting a > 1 s period into multiple <= 1 s periods. */ else if (timer->callback != NULL) /* Make sure it's no NULL, so that we can have a NULL callback when no operation is needed. */ timer->callback(timer->priv); - timer->flags &= ~TIMER_ENABLED; + if (timer->flags |= TIMER_ENABLE) + timer->flags = (timer_flags & ~TIMER_ENABLE) | TIMER_ENABLED; + else + timer->flags &= ~TIMER_ENABLED; } timer_target = timer_head->ts.ts32.integer; diff --git a/src/timer.c b/src/timer.c index 314e8a698..354b193a5 100644 --- a/src/timer.c +++ b/src/timer.c @@ -29,7 +29,10 @@ timer_enable(pc_timer_t *timer) if (timer->next || timer->prev) fatal("timer_enable - timer->next\n"); - timer->flags |= TIMER_ENABLED; + if (timer->flags & TIMER_PROCESS) + timer->flags = (timer->flags & ~TIMER_PROCESS) | TIMER_ENABLE; + else + timer->flags |= TIMER_ENABLED; /*List currently empty - add to head*/ if (!timer_head) { @@ -118,13 +121,17 @@ timer_process(void) timer_head->prev = NULL; timer->next = timer->prev = NULL; + timer->flags |= TIMER_PROCESS; if (timer->flags & TIMER_SPLIT) timer_advance_ex(timer, 0); /* We're splitting a > 1 s period into multiple <= 1 s periods. */ else if (timer->callback != NULL) /* Make sure it's no NULL, so that we can have a NULL callback when no operation is needed. */ timer->callback(timer->priv); - timer->flags &= ~TIMER_ENABLED; + if (timer->flags |= TIMER_ENABLE) + timer->flags = (timer_flags & ~TIMER_ENABLE) | TIMER_ENABLED; + else + timer->flags &= ~TIMER_ENABLED; } timer_target = timer_head->ts.ts32.integer;