Fixed <rdar://problem/3872440> NSTimer prematurely released.
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Nov 2004 21:52:20 +0000 (21:52 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Nov 2004 21:52:20 +0000 (21:52 +0000)
        Reviewed by Darin.

        * kwq/KWQTimer.mm:
        (QTimer::fire):
        * kwq/KWQWidget.mm:
        (QWidget::paint):

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

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

index 6029040..c992f07 100644 (file)
@@ -1,3 +1,14 @@
+2004-11-09  Richard Williamson   <rjw@apple.com>
+
+        Fixed <rdar://problem/3872440> NSTimer prematurely released.
+
+        Reviewed by Darin.
+
+        * kwq/KWQTimer.mm:
+        (QTimer::fire):
+        * kwq/KWQWidget.mm:
+        (QWidget::paint):
+
 2004-11-09  Chris Blumenberg  <cblu@apple.com>
 
         Reviewed by vicki.
 2004-11-09  Chris Blumenberg  <cblu@apple.com>
 
         Reviewed by vicki.
index 893d140..79ff0f0 100644 (file)
@@ -140,10 +140,11 @@ void QTimer::setMonitor(void (*monitorFunction)(void *context), void *context)
 
 void QTimer::fire()
 {
 
 void QTimer::fire()
 {
-    if (![m_timer isValid]) {
-        KWQRelease(m_timer);
-        m_timer = nil;
-    }
+    // Ensure that m_timer is kept around for duration of callback.
+    // Final reference will eventually be released in stop(), which may be called 
+    // in this frame, hence the need to ensure the timer is kept around until
+    // the pool is released. 
+    [[m_timer retain] autorelease];
 
     // Note: This call may destroy the QTimer, so be sure not to touch any fields afterward.
     m_timeoutSignal.call();
 
     // Note: This call may destroy the QTimer, so be sure not to touch any fields afterward.
     m_timeoutSignal.call();