Ignore:
Timestamp:
Aug 2, 2010, 9:27:30 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.3 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/dbus/qdbuspendingcall.cpp

    r651 r769  
    209209void QDBusPendingCallPrivate::checkReceivedSignature()
    210210{
     211    // MUST BE CALLED WITH A LOCKED MUTEX!
     212
    211213    if (replyMessage.type() == QDBusMessage::InvalidMessage)
    212214        return;                 // not yet finished - no message to
     
    231233void QDBusPendingCallPrivate::waitForFinished()
    232234{
     235    QMutexLocker locker(&mutex);
     236
    233237    if (replyMessage.type() != QDBusMessage::InvalidMessage)
    234238        return;                 // already finished
     
    311315bool QDBusPendingCall::isFinished() const
    312316{
    313     return !d || (d->replyMessage.type() != QDBusMessage::InvalidMessage);
     317    if (!d)
     318        return true; // considered finished
     319
     320    QMutexLocker locker(&d->mutex);
     321    return d->replyMessage.type() != QDBusMessage::InvalidMessage;
    314322}
    315323
     
    330338bool QDBusPendingCall::isValid() const
    331339{
    332     return d ? d->replyMessage.type() == QDBusMessage::ReplyMessage : false;
     340    if (!d)
     341        return false;
     342    QMutexLocker locker(&d->mutex);
     343    return d->replyMessage.type() == QDBusMessage::ReplyMessage;
    333344}
    334345
     
    344355bool QDBusPendingCall::isError() const
    345356{
    346     return d ? d->replyMessage.type() == QDBusMessage::ErrorMessage : true;
     357    if (!d)
     358        return true; // considered finished and an error
     359    QMutexLocker locker(&d->mutex);
     360    return d->replyMessage.type() == QDBusMessage::ErrorMessage;
    347361}
    348362
     
    357371QDBusError QDBusPendingCall::error() const
    358372{
    359     if (d)
     373    if (d) {
     374        QMutexLocker locker(&d->mutex);
    360375        return d->replyMessage;
     376    }
    361377
    362378    // not connected, return an error
     
    379395QDBusMessage QDBusPendingCall::reply() const
    380396{
    381     return d ? d->replyMessage : QDBusMessage::createError(error());
     397    if (!d)
     398        return QDBusMessage::createError(error());
     399    QMutexLocker locker(&d->mutex);
     400    return d->replyMessage;
    382401}
    383402
     
    440459    if (msg.type() == QDBusMessage::ErrorMessage ||
    441460        msg.type() == QDBusMessage::ReplyMessage) {
    442         d = new QDBusPendingCallPrivate;
     461        d = new QDBusPendingCallPrivate(QDBusMessage(), 0);
    443462        d->replyMessage = msg;
    444         d->connection = 0;
    445463    }
    446464
     
    472490{
    473491    if (d) {                    // QDBusPendingCall::d
     492        QMutexLocker locker(&d->mutex);
    474493        if (!d->watcherHelper) {
    475494            d->watcherHelper = new QDBusPendingCallWatcherHelper;
    476             if (isFinished()) {
     495            if (d->replyMessage.type() != QDBusMessage::InvalidMessage) {
    477496                // cause a signal emission anyways
    478497                QMetaObject::invokeMethod(d->watcherHelper, "finished", Qt::QueuedConnection);
Note: See TracChangeset for help on using the changeset viewer.