A new fix for Bug #331: "XSpice skips digital output point".

The problem was caused by removing an output queue from the "modified"
list when it had been modified by processing one of its events.
This commit is contained in:
Giles Atkinson 2023-02-21 15:57:20 +00:00 committed by Holger Vogt
parent 7457a2684b
commit 06aa693852
1 changed files with 15 additions and 6 deletions

View File

@ -618,17 +618,26 @@ static void EVTbackup_output_queue(
}
output_queue->next_time = next_time;
/* Update the modified list by looking for any queued events */
/* with posted time > last_time */
/* Update the modified list by looking for events that were processed
* or queued in the current timestep.
*/
for(i = 0, j = 0; i < num_modified; i++) {
output_index = output_queue->modified_index[i];
output = *(output_queue->last_step[output_index]);
while(output) {
if(output->posted_time > output_queue->last_time)
break;
output = output->next;
if (output_queue->current[output_index] ==
output_queue->last_step[output_index]) {
/* Nothing now removed from the queue,
* but it may have been modified by an addition.
*/
while(output) {
if(output->posted_time > output_queue->last_time)
break;
output = output->next;
}
}
if(! output) {