add one more workaround for possible freezes (#96)

First of all it seems that freezes were caused by stuck dbus calls. I've
enabled dbus call timeout (build-configured, default to 3000 msec). And
moreover I've added one more thread lock for dbus calls.
This commit is contained in:
2016-06-17 15:19:00 +03:00
parent b20a96d32f
commit 0f1763cb81
4 changed files with 108 additions and 5 deletions

View File

@ -164,8 +164,12 @@ void PlayerSource::run()
m_values = getPlayerMpdInfo(m_mpdAddress);
} else if (m_player == QString("mpris")) {
// players which supports mpris
QString mpris = m_mpris == QString("auto") ? getAutoMpris() : m_mpris;
m_values = getPlayerMprisInfo(mpris);
if (m_dbusMutex.tryLock()) {
QString mpris
= m_mpris == QString("auto") ? getAutoMpris() : m_mpris;
m_values = getPlayerMprisInfo(mpris);
m_dbusMutex.unlock();
}
}
// dymanic properties
@ -258,7 +262,7 @@ QVariantHash PlayerSource::defaultInfo() const
QString PlayerSource::getAutoMpris() const
{
QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(
QDBus::BlockWithGui, QString("ListNames"));
QDBus::BlockWithGui, QString("ListNames"), DBUS_CALL_TIMEOUT);
if (listServices.arguments().isEmpty())
return QString();
QStringList arguments = listServices.arguments().first().toStringList();
@ -315,7 +319,8 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString mpris) const
QString("org.mpris.MediaPlayer2.%1").arg(mpris),
QString("/org/mpris/MediaPlayer2"), QString(""), QString("Get"));
request.setArguments(args);
QDBusMessage response = bus.call(request, QDBus::BlockWithGui);
QDBusMessage response
= bus.call(request, QDBus::BlockWithGui, DBUS_CALL_TIMEOUT);
if ((response.type() != QDBusMessage::ReplyMessage)
|| (response.arguments().isEmpty())) {
qCWarning(LOG_ESS) << "Error message" << response.errorMessage();