diff --git a/Storage/Disk/DiskController.cpp b/Storage/Disk/DiskController.cpp index d4979b590..4410a20de 100644 --- a/Storage/Disk/DiskController.cpp +++ b/Storage/Disk/DiskController.cpp @@ -104,8 +104,10 @@ void Controller::begin_writing(bool clamp_to_index_hole) { } void Controller::end_writing() { - is_reading_ = true; - get_drive().end_writing(); + if(!is_reading_) { + is_reading_ = true; + get_drive().end_writing(); + } } bool Controller::is_reading() { diff --git a/Storage/Disk/Drive.cpp b/Storage/Disk/Drive.cpp index 130aa1c75..11be3a05d 100644 --- a/Storage/Disk/Drive.cpp +++ b/Storage/Disk/Drive.cpp @@ -237,16 +237,18 @@ void Drive::write_bit(bool value) { } void Drive::end_writing() { - is_reading_ = true; + if(!is_reading_) { + is_reading_ = true; - if(!patched_track_) { - // Avoid creating a new patched track if this one is already patched - patched_track_ = std::dynamic_pointer_cast(track_); if(!patched_track_) { - patched_track_.reset(new PCMPatchedTrack(track_)); + // Avoid creating a new patched track if this one is already patched + patched_track_ = std::dynamic_pointer_cast(track_); + if(!patched_track_) { + patched_track_.reset(new PCMPatchedTrack(track_)); + } } + patched_track_->add_segment(write_start_time_, write_segment_, clamp_writing_to_index_hole_); + cycles_since_index_hole_ %= get_input_clock_rate(); + invalidate_track(); } - patched_track_->add_segment(write_start_time_, write_segment_, clamp_writing_to_index_hole_); - cycles_since_index_hole_ %= get_input_clock_rate(); - invalidate_track(); }