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:
whitequark 2020-08-27 08:33:48 +00:00
parent 9bc42cb8c5
commit 9bdb7accc8

View file

@ -402,10 +402,16 @@ class Simulator:
Signals to display traces for.
"""
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")
waveform_writer = _VCDWaveformWriter(self._fragment,
vcd_file=vcd_file, gtkw_file=gtkw_file, traces=traces)
self._waveform_writers.append(waveform_writer)
yield
waveform_writer.close(self._state.timeline.now)
self._waveform_writers.remove(waveform_writer)
try:
self._waveform_writers.append(waveform_writer)
yield
finally:
waveform_writer.close(self._state.timeline.now)
self._waveform_writers.remove(waveform_writer)