Fix for QSoundEffect crash bug
When multiple QSoundEffect instances play the same wav source file simultaneously, the system would crash due to some instances not waiting for the underlying pulse audio stream to complete its setup logic. QSoundEffect now waits for the stream to attain the correct state before playing the sound. Change-Id: Ib5a1e6bc3f1cc314054f9cdc89c10100ad546721 Reviewed-by: Ling Hu <ling.hu@nokia.com> Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
This commit is contained in:
committed by
Qt by Nokia
parent
6b67a11032
commit
13d75ce063
@@ -567,7 +567,7 @@ void QSoundEffectPrivate::play()
|
||||
return;
|
||||
|
||||
PulseDaemonLocker locker;
|
||||
if (!m_sampleReady || !m_pulseStream || m_stopping || m_emptying) {
|
||||
if (!m_pulseStream || m_status != QSoundEffect::Ready || m_stopping || m_emptying) {
|
||||
#ifdef QT_PA_DEBUG
|
||||
qDebug() << this << "play deferred";
|
||||
#endif
|
||||
@@ -794,6 +794,7 @@ void QSoundEffectPrivate::playSample()
|
||||
qDebug() << this << "playSample";
|
||||
#endif
|
||||
Q_ASSERT(m_pulseStream);
|
||||
Q_ASSERT(pa_stream_get_state(m_pulseStream) == PA_STREAM_READY);
|
||||
pa_operation_unref(pa_stream_cork(m_pulseStream, 0, 0, 0));
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@@ -123,7 +123,7 @@ void tst_QSound::testStop()
|
||||
void tst_QSound::testStaticPlay()
|
||||
{
|
||||
// Check that you hear sound with static play also.
|
||||
const QString testFileName = QStringLiteral("test2.wav");
|
||||
const QString testFileName = QStringLiteral("test.wav");
|
||||
const QString fullPath = QFINDTESTDATA(testFileName);
|
||||
QVERIFY2(!fullPath.isEmpty(), qPrintable(QStringLiteral("Unable to locate ") + testFileName));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user