From 06aa693852db92e248a0d81184bdd16adf1798c8 Mon Sep 17 00:00:00 2001 From: Giles Atkinson <“gatk555@gmail.com”> Date: Tue, 21 Feb 2023 15:57:20 +0000 Subject: [PATCH] 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. --- src/xspice/evt/evtbackup.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/xspice/evt/evtbackup.c b/src/xspice/evt/evtbackup.c index dc4432a43..fe1e02784 100644 --- a/src/xspice/evt/evtbackup.c +++ b/src/xspice/evt/evtbackup.c @@ -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) {