diff options
author | Murray Read <ext-murray.2.read@nokia.com> | 2012-02-08 14:16:27 (GMT) |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-09 15:23:50 (GMT) |
commit | a13b2a248e5091ddf21e3c5ac08c9ddf0b940b5b (patch) | |
tree | 8f1e58987a7c2178af754d871d40782296fad496 /src/s60installs | |
parent | a784bdcabe895ab927cbc28118d427c6e932b9fc (diff) | |
download | Qt-a13b2a248e5091ddf21e3c5ac08c9ddf0b940b5b.zip Qt-a13b2a248e5091ddf21e3c5ac08c9ddf0b940b5b.tar.gz Qt-a13b2a248e5091ddf21e3c5ac08c9ddf0b940b5b.tar.bz2 |
Avoiding early deleteLater in Symbian with better loopLevel tracking
There have been a number of app crashes where deleteLater has been
triggering too early, causing an object to be deleted before it has
been finished with. This was happening when deleteLater was issued
then Symbian's active scheduler loop was nested. Qt keeps track of
loop nesting level to implement deleteLater correctly, but it was
only tracking the event loop in processEvents and QEventLoop correctly.
The wakeup and timer active objects were assuming they were always
run from processEvents and its round robin active scheduler and were
adjusting the loop level to account for this. However if they happened
to run in another event loop, eg the active scheduler, the loop level
adjustment meant that it looked like the event loop was re-running at
the same level, which allowed deleteLater to act.
The fix is to mark active objects as being run from the RR scheduler,
then the wakeup and timer active objects can be tested to see which
type of scheduler they are actually running in. With this knowledge,
the correct loop level adjustment can be made, and deleteLater runs
at the correct time.
Task-number: ou1cimx1#947013
Change-Id: Id05cd63ad10e100ea807cc276844aaa36c614351
Reviewed-by: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Reviewed-by: Shane Kearns <ext-shane.2.kearns@nokia.com>
Diffstat (limited to 'src/s60installs')
-rw-r--r-- | src/s60installs/bwins/QtCoreu.def | 6 | ||||
-rw-r--r-- | src/s60installs/eabi/QtCoreu.def | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def index cfd2cec..d6058d6 100644 --- a/src/s60installs/bwins/QtCoreu.def +++ b/src/s60installs/bwins/QtCoreu.def @@ -3696,7 +3696,7 @@ EXPORTS ?timerEvent@QObject@@MAEXPAVQTimerEvent@@@Z @ 3695 NONAME ; void QObject::timerEvent(class QTimerEvent *) ?timerEvent@QTimeLine@@MAEXPAVQTimerEvent@@@Z @ 3696 NONAME ; void QTimeLine::timerEvent(class QTimerEvent *) ?timerEvent@QTimer@@MAEXPAVQTimerEvent@@@Z @ 3697 NONAME ; void QTimer::timerEvent(class QTimerEvent *) - ?timerFired@QEventDispatcherSymbian@@QAEXH@Z @ 3698 NONAME ; void QEventDispatcherSymbian::timerFired(int) + ?timerFired@QEventDispatcherSymbian@@QAEXH@Z @ 3698 NONAME ABSENT ; void QEventDispatcherSymbian::timerFired(int) ?timerId@QBasicTimer@@QBEHXZ @ 3699 NONAME ; int QBasicTimer::timerId(void) const ?timerId@QTimer@@QBEHXZ @ 3700 NONAME ; int QTimer::timerId(void) const ?timerId@QTimerEvent@@QBEHXZ @ 3701 NONAME ; int QTimerEvent::timerId(void) const @@ -4202,7 +4202,7 @@ EXPORTS ?wakeOne@QWaitCondition@@QAEXXZ @ 4201 NONAME ; void QWaitCondition::wakeOne(void) ?wakeUp@QEventDispatcherSymbian@@UAEXXZ @ 4202 NONAME ; void QEventDispatcherSymbian::wakeUp(void) ?wakeUp@QEventLoop@@QAEXXZ @ 4203 NONAME ; void QEventLoop::wakeUp(void) - ?wakeUpWasCalled@QEventDispatcherSymbian@@QAEXXZ @ 4204 NONAME ; void QEventDispatcherSymbian::wakeUpWasCalled(void) + ?wakeUpWasCalled@QEventDispatcherSymbian@@QAEXXZ @ 4204 NONAME ABSENT ; void QEventDispatcherSymbian::wakeUpWasCalled(void) ?weekNumber@QDate@@QBEHPAH@Z @ 4205 NONAME ; int QDate::weekNumber(int *) const ?width@QRect@@QBEHXZ @ 4206 NONAME ; int QRect::width(void) const ?width@QRectF@@QBEMXZ @ 4207 NONAME ; float QRectF::width(void) const @@ -4889,4 +4889,6 @@ EXPORTS ?removeActiveConnection@QSymbianSocketManager@@QAEXK@Z @ 4888 NONAME ; void QSymbianSocketManager::removeActiveConnection(unsigned long) ?addActiveConnection@QSymbianSocketManager@@QAEXK@Z @ 4889 NONAME ; void QSymbianSocketManager::addActiveConnection(unsigned long) ?activeObjectError@QEventDispatcherSymbian@@QAEXH@Z @ 4890 NONAME ; void QEventDispatcherSymbian::activeObjectError(int) + ?timerFired@QEventDispatcherSymbian@@QAEXHPAVQTimerActiveObject@@@Z @ 4891 NONAME ; void QEventDispatcherSymbian::timerFired(int, class QTimerActiveObject *) + ?wakeUpWasCalled@QEventDispatcherSymbian@@QAEXPAVQWakeUpActiveObject@@@Z @ 4892 NONAME ; void QEventDispatcherSymbian::wakeUpWasCalled(class QWakeUpActiveObject *) diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def index 44aa48c..7977492 100644 --- a/src/s60installs/eabi/QtCoreu.def +++ b/src/s60installs/eabi/QtCoreu.def @@ -1280,13 +1280,13 @@ EXPORTS _ZN23QCoreApplicationPrivateD1Ev @ 1279 NONAME _ZN23QCoreApplicationPrivateD2Ev @ 1280 NONAME _ZN23QEventDispatcherSymbian10startingUpEv @ 1281 NONAME - _ZN23QEventDispatcherSymbian10timerFiredEi @ 1282 NONAME + _ZN23QEventDispatcherSymbian10timerFiredEi @ 1282 NONAME ABSENT _ZN23QEventDispatcherSymbian11closingDownEv @ 1283 NONAME _ZN23QEventDispatcherSymbian11socketFiredEP19QSocketActiveObject @ 1284 NONAME ABSENT _ZN23QEventDispatcherSymbian13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE @ 1285 NONAME _ZN23QEventDispatcherSymbian13registerTimerEiiP7QObject @ 1286 NONAME _ZN23QEventDispatcherSymbian15unregisterTimerEi @ 1287 NONAME - _ZN23QEventDispatcherSymbian15wakeUpWasCalledEv @ 1288 NONAME + _ZN23QEventDispatcherSymbian15wakeUpWasCalledEv @ 1288 NONAME ABSENT _ZN23QEventDispatcherSymbian16hasPendingEventsEv @ 1289 NONAME _ZN23QEventDispatcherSymbian16sendPostedEventsEv @ 1290 NONAME _ZN23QEventDispatcherSymbian16unregisterTimersEP7QObject @ 1291 NONAME @@ -4169,4 +4169,6 @@ EXPORTS _ZN21QSymbianSocketManager22removeActiveConnectionEm @ 4168 NONAME _ZN23QEventDispatcherSymbian17activeObjectErrorEi @ 4169 NONAME _ZNK21QSymbianSocketManager17activeConnectionsEv @ 4170 NONAME + _ZN23QEventDispatcherSymbian10timerFiredEiP18QTimerActiveObject @ 4171 NONAME + _ZN23QEventDispatcherSymbian15wakeUpWasCalledEP19QWakeUpActiveObject @ 4172 NONAME |