Reviewed by John.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Nov 2004 00:02:11 +0000 (00:02 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Nov 2004 00:02:11 +0000 (00:02 +0000)
        - fixed <rdar://problem/3825966> 8A274 Safari crashes closing window: QTimer::fire() with MallocStackLogging and MallocScribble enabled

        * kwq/KWQTimer.mm: (QTimer::fire): Rearrange so we don't access the QTimer object after calling code
        that possibly deletes the QTimer.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7956 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/kwq/KWQTimer.mm

index b7b4e69..bea24b1 100644 (file)
@@ -1,3 +1,12 @@
+2004-11-08  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - fixed <rdar://problem/3825966> 8A274 Safari crashes closing window: QTimer::fire() with MallocStackLogging and MallocScribble enabled
+
+        * kwq/KWQTimer.mm: (QTimer::fire): Rearrange so we don't access the QTimer object after calling code
+        that possibly deletes the QTimer.
+
 2004-11-08  Chris Blumenberg  <cblu@apple.com>
 
        Fixed: <rdar://problem/3783904> Return key behavior is confusingly different between popup menus and autofill menus
 2004-11-08  Chris Blumenberg  <cblu@apple.com>
 
        Fixed: <rdar://problem/3783904> Return key behavior is confusingly different between popup menus and autofill menus
 
 2004-10-29  Darin Adler  <darin@apple.com>
 
 
 2004-10-29  Darin Adler  <darin@apple.com>
 
-        Reviewed by NOBODY (OOPS!).
+        Reviewed by Kevin.
 
         - fixed <rdar://problem/3751619> Safari crash in khtml::CircularSearchBuffer::append(QChar const&)
 
 
         - fixed <rdar://problem/3751619> Safari crash in khtml::CircularSearchBuffer::append(QChar const&)
 
index e164940..893d140 100644 (file)
@@ -140,12 +140,13 @@ void QTimer::setMonitor(void (*monitorFunction)(void *context), void *context)
 
 void QTimer::fire()
 {
 
 void QTimer::fire()
 {
-    m_timeoutSignal.call();
-
     if (![m_timer isValid]) {
         KWQRelease(m_timer);
         m_timer = nil;
     }
     if (![m_timer isValid]) {
         KWQRelease(m_timer);
         m_timer = nil;
     }
+
+    // Note: This call may destroy the QTimer, so be sure not to touch any fields afterward.
+    m_timeoutSignal.call();
 }
 
 void QTimer::singleShot(int msec, QObject *receiver, const char *member)
 }
 
 void QTimer::singleShot(int msec, QObject *receiver, const char *member)