Tolerate race condition which results in spurious timer thread wakeups which were causing the timer thread to exit. (SIM_ASYNCH_CLOCKS)
This commit is contained in:
parent
6cf54e8341
commit
6c6d641034
2 changed files with 4 additions and 7 deletions
|
@ -541,6 +541,7 @@ for (i=(was_stepping ? sim_rem_step_line : 0);
|
|||
c = c & ~TMXR_VALID;
|
||||
if (c != sim_int_char)
|
||||
continue; /* ^E (the interrupt character) must start console interaction */
|
||||
sim_is_running = 0;
|
||||
sim_stop_timer_services ();
|
||||
for (j=0; j < sim_rem_con_tmxr.lines; j++) {
|
||||
lp = &sim_rem_con_tmxr.ldsc[j];
|
||||
|
@ -728,6 +729,7 @@ for (i=(was_stepping ? sim_rem_step_line : 0);
|
|||
tmxr_linemsg (lp, "Simulator Running...");
|
||||
tmxr_send_buffered_data (lp);
|
||||
}
|
||||
sim_is_running = 1;
|
||||
sim_start_timer_services ();
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1250,15 +1250,10 @@ while (sim_asynch_enabled && sim_asynch_timer && sim_is_running) {
|
|||
}
|
||||
else
|
||||
sim_activate (uptr, inst_delay);
|
||||
continue;
|
||||
}
|
||||
else /* Something wants to adjust the queue since the wait condition was signaled */
|
||||
else {/* Something wants to adjust the queue since the wait condition was signaled */
|
||||
if (sim_timer_event_canceled)
|
||||
sim_timer_event_canceled = FALSE; /* reset flag and continue */
|
||||
else
|
||||
if (sim_wallclock_entry == NULL) { /* nothing to insert? */
|
||||
sim_debug (DBG_TIM, &sim_timer_dev, "_timer_thread() - condition wakeup without new entry\n");
|
||||
break; /* stop processing entries */
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock (&sim_timer_lock);
|
||||
|
|
Loading…
Add table
Reference in a new issue