# HG changeset patch # User Chris Cannam # Date 1202387743 0 # Node ID f1ff248a793efa73354af0469ab5e44cc23e8bee # Parent 7cc6b7b0d8193b256ab9d8d85c792cb58dc0abda * Attempt to fix crash caused by race condition on threaded file decode diff -r 7cc6b7b0d819 -r f1ff248a793e data/fileio/CodedAudioFileReader.cpp --- a/data/fileio/CodedAudioFileReader.cpp Wed Feb 06 17:40:53 2008 +0000 +++ b/data/fileio/CodedAudioFileReader.cpp Thu Feb 07 12:35:43 2008 +0000 @@ -294,7 +294,7 @@ float max = 1.0; size_t count = sz * m_channelCount; - if (m_resampler) { + if (m_resampler && m_fileRate != 0) { float ratio = float(m_sampleRate) / float(m_fileRate); diff -r 7cc6b7b0d819 -r f1ff248a793e data/fileio/MP3FileReader.cpp --- a/data/fileio/MP3FileReader.cpp Wed Feb 06 17:40:53 2008 +0000 +++ b/data/fileio/MP3FileReader.cpp Thu Feb 07 12:35:43 2008 +0000 @@ -135,7 +135,7 @@ m_decodeThread = new DecodeThread(this); m_decodeThread->start(); - while (m_channelCount == 0 && !m_done) { + while ((m_channelCount == 0 || m_fileRate == 0) && !m_done) { usleep(10); } } @@ -358,7 +358,8 @@ double bitrate = m_bitrateNum / m_bitrateDenom; double duration = double(m_fileSize * 8) / bitrate; double elapsed = double(m_frameCount) / m_sampleRate; - double percent = ((elapsed * 100.0) / duration); + double percent = 100; + if (duration > 0.0) percent = ((elapsed * 100.0) / duration); int p = int(percent); if (p < 1) p = 1; if (p > 99) p = 99;