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;
|
c = c & ~TMXR_VALID;
|
||||||
if (c != sim_int_char)
|
if (c != sim_int_char)
|
||||||
continue; /* ^E (the interrupt character) must start console interaction */
|
continue; /* ^E (the interrupt character) must start console interaction */
|
||||||
|
sim_is_running = 0;
|
||||||
sim_stop_timer_services ();
|
sim_stop_timer_services ();
|
||||||
for (j=0; j < sim_rem_con_tmxr.lines; j++) {
|
for (j=0; j < sim_rem_con_tmxr.lines; j++) {
|
||||||
lp = &sim_rem_con_tmxr.ldsc[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_linemsg (lp, "Simulator Running...");
|
||||||
tmxr_send_buffered_data (lp);
|
tmxr_send_buffered_data (lp);
|
||||||
}
|
}
|
||||||
|
sim_is_running = 1;
|
||||||
sim_start_timer_services ();
|
sim_start_timer_services ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1250,15 +1250,10 @@ while (sim_asynch_enabled && sim_asynch_timer && sim_is_running) {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sim_activate (uptr, inst_delay);
|
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)
|
if (sim_timer_event_canceled)
|
||||||
sim_timer_event_canceled = FALSE; /* reset flag and continue */
|
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);
|
pthread_mutex_unlock (&sim_timer_lock);
|
||||||
|
|
Loading…
Add table
Reference in a new issue