src/corelib/kernel/qobject.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
child 30 5dc02b23752f
equal deleted inserted replaced
18:2f34d5167611 19:fcece45ef507
  3262                 continue;
  3262                 continue;
  3263             }
  3263             }
  3264 
  3264 
  3265             const int method = c->method;
  3265             const int method = c->method;
  3266             QObjectPrivate::Sender currentSender;
  3266             QObjectPrivate::Sender currentSender;
  3267             currentSender.sender = sender;
  3267             const bool receiverInSameThread = currentThreadData == receiver->d_func()->threadData;
  3268             currentSender.signal = signal_absolute_index;
       
  3269             currentSender.ref = 1;
       
  3270             QObjectPrivate::Sender *previousSender = 0;
  3268             QObjectPrivate::Sender *previousSender = 0;
  3271             if (currentThreadData == receiver->d_func()->threadData)
  3269             if (receiverInSameThread) {
       
  3270                 currentSender.sender = sender;
       
  3271                 currentSender.signal = signal_absolute_index;
       
  3272                 currentSender.ref = 1;
  3272                 previousSender = QObjectPrivate::setCurrentSender(receiver, &currentSender);
  3273                 previousSender = QObjectPrivate::setCurrentSender(receiver, &currentSender);
       
  3274             }
  3273             locker.unlock();
  3275             locker.unlock();
  3274 
  3276 
  3275             if (qt_signal_spy_callback_set.slot_begin_callback != 0) {
  3277             if (qt_signal_spy_callback_set.slot_begin_callback != 0) {
  3276                 qt_signal_spy_callback_set.slot_begin_callback(receiver,
  3278                 qt_signal_spy_callback_set.slot_begin_callback(receiver,
  3277                                                                method,
  3279                                                                method,
  3283 #else
  3285 #else
  3284             QT_TRY {
  3286             QT_TRY {
  3285                 metacall(receiver, QMetaObject::InvokeMetaMethod, method, argv ? argv : empty_argv);
  3287                 metacall(receiver, QMetaObject::InvokeMetaMethod, method, argv ? argv : empty_argv);
  3286             } QT_CATCH(...) {
  3288             } QT_CATCH(...) {
  3287                 locker.relock();
  3289                 locker.relock();
  3288 
  3290                 if (receiverInSameThread)
  3289                 QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
  3291                     QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
  3290 
  3292 
  3291                 --connectionLists->inUse;
  3293                 --connectionLists->inUse;
  3292                 Q_ASSERT(connectionLists->inUse >= 0);
  3294                 Q_ASSERT(connectionLists->inUse >= 0);
  3293                 if (connectionLists->orphaned && !connectionLists->inUse)
  3295                 if (connectionLists->orphaned && !connectionLists->inUse)
  3294                     delete connectionLists;
  3296                     delete connectionLists;
  3299             if (qt_signal_spy_callback_set.slot_end_callback != 0)
  3301             if (qt_signal_spy_callback_set.slot_end_callback != 0)
  3300                 qt_signal_spy_callback_set.slot_end_callback(receiver, method);
  3302                 qt_signal_spy_callback_set.slot_end_callback(receiver, method);
  3301 
  3303 
  3302             locker.relock();
  3304             locker.relock();
  3303 
  3305 
  3304             QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
  3306             if (receiverInSameThread)
       
  3307                 QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
  3305 
  3308 
  3306             if (connectionLists->orphaned)
  3309             if (connectionLists->orphaned)
  3307                 break;
  3310                 break;
  3308         } while (c != last && (c = c->nextConnectionList) != 0);
  3311         } while (c != last && (c = c->nextConnectionList) != 0);
  3309 
  3312