sim.pysim: in write_vcd(), close files if an exception is raised.
This also avoids leaving the waveform writer list in an inconsistent state after an exception.
This commit is contained in:
parent
9bc42cb8c5
commit
9bdb7accc8
|
@ -402,10 +402,16 @@ class Simulator:
|
||||||
Signals to display traces for.
|
Signals to display traces for.
|
||||||
"""
|
"""
|
||||||
if self._state.timeline.now != 0.0:
|
if self._state.timeline.now != 0.0:
|
||||||
|
for file in (vcd_file, gtkw_file):
|
||||||
|
if hasattr(file, "close"):
|
||||||
|
file.close()
|
||||||
raise ValueError("Cannot start writing waveforms after advancing simulation time")
|
raise ValueError("Cannot start writing waveforms after advancing simulation time")
|
||||||
|
|
||||||
waveform_writer = _VCDWaveformWriter(self._fragment,
|
waveform_writer = _VCDWaveformWriter(self._fragment,
|
||||||
vcd_file=vcd_file, gtkw_file=gtkw_file, traces=traces)
|
vcd_file=vcd_file, gtkw_file=gtkw_file, traces=traces)
|
||||||
self._waveform_writers.append(waveform_writer)
|
try:
|
||||||
yield
|
self._waveform_writers.append(waveform_writer)
|
||||||
waveform_writer.close(self._state.timeline.now)
|
yield
|
||||||
self._waveform_writers.remove(waveform_writer)
|
finally:
|
||||||
|
waveform_writer.close(self._state.timeline.now)
|
||||||
|
self._waveform_writers.remove(waveform_writer)
|
||||||
|
|
Loading…
Reference in a new issue