1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-29 12:50:28 +00:00

Adds defences against double calls to end writing.

This commit is contained in:
Thomas Harte 2017-09-16 17:07:36 -04:00
parent 98751e6ac8
commit a85909198f
2 changed files with 14 additions and 10 deletions

View File

@ -104,8 +104,10 @@ void Controller::begin_writing(bool clamp_to_index_hole) {
} }
void Controller::end_writing() { void Controller::end_writing() {
is_reading_ = true; if(!is_reading_) {
get_drive().end_writing(); is_reading_ = true;
get_drive().end_writing();
}
} }
bool Controller::is_reading() { bool Controller::is_reading() {

View File

@ -237,16 +237,18 @@ void Drive::write_bit(bool value) {
} }
void Drive::end_writing() { 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<PCMPatchedTrack>(track_);
if(!patched_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<PCMPatchedTrack>(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();
} }