From kde-commits Thu Sep 27 10:13:42 2007 From: Matthias Kretz Date: Thu, 27 Sep 2007 10:13:42 +0000 To: kde-commits Subject: KDE/kdelibs/phonon/platform_kde Message-Id: <1190888022.638542.15850.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=119088803123138 SVN commit 717687 by mkretz: workaround KIO deadlocks (well it's probably nicer anyway) by not recursing: a slot connected to a KIO signal would call another KIO function and this can lock up in waitForBytesWritten - qt-bugs mail already sent M +17 -4 kiomediastream.cpp M +1 -0 kiomediastream.h M +1 -0 kiomediastream_p.h --- trunk/KDE/kdelibs/phonon/platform_kde/kiomediastream.cpp #717686:717687 @@ -101,7 +101,8 @@ d->reading = true; } else if (!d->reading) { d->reading = true; - filejob->read(32768); + QMetaObject::invokeMethod(this, "_k_read", Qt::QueuedConnection); + //filejob->read(32768); } } else { // KIO::TransferJob @@ -127,6 +128,7 @@ Q_D(KioMediaStream); if (!d->kiojob || d->endOfDataSent) { // no job => job is finished and endOfData was already sent + kDebug(600) << "no job/job finished -> recreate it"; reset(); } Q_ASSERT(d->kiojob); @@ -166,7 +168,8 @@ if (reading) { KIO::FileJob *filejob = qobject_cast(kiojob); Q_ASSERT(filejob); - filejob->read(32768); + //filejob->read(32768); + QMetaObject::invokeMethod(q, "_k_read", Qt::QueuedConnection); } } @@ -221,7 +224,8 @@ if (seeking) { filejob->seek(seekPosition); } else if (reading) { - filejob->read(32768); + //filejob->read(32768); + QMetaObject::invokeMethod(q, "_k_read", Qt::QueuedConnection); } } @@ -232,12 +236,21 @@ seeking = false; endOfDataSent = false; if (reading) { + Q_Q(KioMediaStream); KIO::FileJob *filejob = qobject_cast(kiojob); Q_ASSERT(filejob); - filejob->read(32768); + //filejob->read(32768); + QMetaObject::invokeMethod(q, "_k_read", Qt::QueuedConnection); } } +void KioMediaStreamPrivate::_k_read() +{ + KIO::FileJob *filejob = qobject_cast(kiojob); + Q_ASSERT(filejob); + filejob->read(32768); +} + } // namespace Phonon #include "kiomediastream.moc" --- trunk/KDE/kdelibs/phonon/platform_kde/kiomediastream.h #717686:717687 @@ -49,6 +49,7 @@ Q_PRIVATE_SLOT(d_func(), void _k_bytestreamTotalSize(KJob *, qulonglong)) Q_PRIVATE_SLOT(d_func(), void _k_bytestreamFileJobOpen(KIO::Job *)) Q_PRIVATE_SLOT(d_func(), void _k_bytestreamSeekDone(KIO::Job *, KIO::filesize_t)) + Q_PRIVATE_SLOT(d_func(), void _k_read()) }; } // namespace Phonon --- trunk/KDE/kdelibs/phonon/platform_kde/kiomediastream_p.h #717686:717687 @@ -59,6 +59,7 @@ void _k_bytestreamSeekStream(qint64); void _k_bytestreamFileJobOpen(KIO::Job *); void _k_bytestreamSeekDone(KIO::Job *, KIO::filesize_t); + void _k_read(); KUrl url; bool endOfDataSent;