diff --git a/scp.c b/scp.c index 9195c340..acd2570e 100644 --- a/scp.c +++ b/scp.c @@ -326,7 +326,6 @@ #if defined (SIM_ASYNCH_IO) pthread_mutex_t sim_asynch_lock = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t sim_asynch_wake = PTHREAD_COND_INITIALIZER; -pthread_mutex_t sim_idle_lock = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t sim_timer_lock = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t sim_timer_wake = PTHREAD_COND_INITIALIZER; diff --git a/sim_defs.h b/sim_defs.h index 24ead23e..f1d550fc 100644 --- a/sim_defs.h +++ b/sim_defs.h @@ -1063,7 +1063,6 @@ struct MEMFILE { extern pthread_mutex_t sim_asynch_lock; extern pthread_cond_t sim_asynch_wake; -extern pthread_mutex_t sim_idle_lock; extern pthread_mutex_t sim_timer_lock; extern pthread_cond_t sim_timer_wake; extern t_bool sim_timer_event_canceled; @@ -1176,7 +1175,6 @@ extern int32 sim_asynch_inst_latency; do { \ pthread_mutex_destroy(&sim_asynch_lock); \ pthread_cond_destroy(&sim_asynch_wake); \ - pthread_mutex_destroy(&sim_idle_lock); \ pthread_mutex_destroy(&sim_timer_lock); \ pthread_cond_destroy(&sim_timer_wake); \ pthread_mutex_destroy(&sim_tmxr_poll_lock); \ @@ -1226,7 +1224,6 @@ extern int32 sim_asynch_inst_latency; do { \ pthread_mutex_destroy(&sim_asynch_lock); \ pthread_cond_destroy(&sim_asynch_wake); \ - pthread_mutex_destroy(&sim_idle_lock); \ pthread_mutex_destroy(&sim_timer_lock); \ pthread_cond_destroy(&sim_timer_wake); \ pthread_mutex_destroy(&sim_tmxr_poll_lock); \ diff --git a/sim_timer.c b/sim_timer.c index 2094499d..c89e93d5 100644 --- a/sim_timer.c +++ b/sim_timer.c @@ -244,27 +244,18 @@ int stat; clock_gettime(CLOCK_REALTIME, &done_time); done_time.tv_sec += (msec/1000); done_time.tv_nsec += 1000000*(msec%1000); -if (done_time.tv_nsec > 1000000000) { +if (done_time.tv_nsec >= 1000000000) { done_time.tv_sec += done_time.tv_nsec/1000000000; done_time.tv_nsec = done_time.tv_nsec%1000000000; } -pthread_mutex_lock (&sim_idle_lock); +pthread_mutex_lock (&sim_asynch_lock); sim_idle_wait = TRUE; -stat = pthread_cond_timedwait (&sim_asynch_wake, &sim_idle_lock, &done_time); -if (stat == 0) - sim_asynch_check = 0; /* force check of asynch queue now */ -else - if (stat == ETIMEDOUT) +if (pthread_cond_timedwait (&sim_asynch_wake, &sim_asynch_lock, &done_time)) timedout = TRUE; - else { - char ans[32]; - - fprintf (stderr, "sim_idle_ms_sleep(%u): pthread_cond_timedwait() return %d - %s\r\n", msec, stat, strerror (stat)); - read_line_p ("Hit Return to exit: ", ans, sizeof (ans) - 1, stdin); - abort (); - } +else + sim_asynch_check = 0; /* force check of asynch queue now */ sim_idle_wait = FALSE; -pthread_mutex_unlock (&sim_idle_lock); +pthread_mutex_unlock (&sim_asynch_lock); if (!timedout) { AIO_UPDATE_QUEUE; }