From 908ddafb5fd17796d53ceaad94ba18cabbcf6dc5 Mon Sep 17 00:00:00 2001 From: krcroft Date: Fri, 28 Feb 2020 18:57:53 -0800 Subject: [PATCH] Reserve the trackFile shared_ptr prior to its test --- src/dos/cdrom_image.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/dos/cdrom_image.cpp b/src/dos/cdrom_image.cpp index 51cdc00c..be28d86f 100644 --- a/src/dos/cdrom_image.cpp +++ b/src/dos/cdrom_image.cpp @@ -488,13 +488,16 @@ bool CDROM_Interface_Image::GetMediaTrayStatus(bool& mediaPresent, bool& mediaCh bool CDROM_Interface_Image::PlayAudioSector(uint64_t start, uint64_t len) { + // Find the track that holds the requested sector track_const_iter track(GetTrack(start)); + std::shared_ptr trackFile; + if (track != tracks.end() && track->file) + trackFile = track->file; // Guard: sanity check the request beyond what GetTrack already checks if (len == 0 - || track == tracks.end() + || !trackFile || track->attr == 0x40 - || !track->file || !player.channel || !player.mutex) { StopAudio(); @@ -521,8 +524,6 @@ bool CDROM_Interface_Image::PlayAudioSector(uint64_t start, uint64_t len) + clamp(relative_start, 0, static_cast(track->length - 1)) * track->sectorSize); - std::shared_ptr trackFile(track->file); - // Guard: Bail if our track could not be seeked if (!trackFile->seek(offset)) { LOG_MSG("CDROM: Track %d failed to seek to byte %u, so cancelling playback",