Title: [171149] trunk/Source/WebCore
Revision
171149
Author
[email protected]
Date
2014-07-16 12:10:22 -0700 (Wed, 16 Jul 2014)

Log Message

REGRESSION(r171069) 75% repro crash in WebCore::AudioHardwareListenerMac::processIsRunningChanged()
https://bugs.webkit.org/show_bug.cgi?id=134986

Reviewed by Eric Carlson.

Add a WeakPtrFactory to AudioHardwareListenerMac, so that if CoreAudio calls our block after
being unregistered, we can bail early instead of calling into a deleted object.

* platform/audio/mac/AudioHardwareListenerMac.cpp:
(WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac):
* platform/audio/mac/AudioHardwareListenerMac.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (171148 => 171149)


--- trunk/Source/WebCore/ChangeLog	2014-07-16 18:05:09 UTC (rev 171148)
+++ trunk/Source/WebCore/ChangeLog	2014-07-16 19:10:22 UTC (rev 171149)
@@ -1,5 +1,19 @@
 2014-07-16  Jer Noble  <[email protected]>
 
+        REGRESSION(r171069) 75% repro crash in WebCore::AudioHardwareListenerMac::processIsRunningChanged()
+        https://bugs.webkit.org/show_bug.cgi?id=134986
+
+        Reviewed by Eric Carlson.
+
+        Add a WeakPtrFactory to AudioHardwareListenerMac, so that if CoreAudio calls our block after
+        being unregistered, we can bail early instead of calling into a deleted object.
+
+        * platform/audio/mac/AudioHardwareListenerMac.cpp:
+        (WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac):
+        * platform/audio/mac/AudioHardwareListenerMac.h:
+
+2014-07-16  Jer Noble  <[email protected]>
+
         [MSE] REGRESSION(r171033): ASSERT in WebCore::MediaSource::onReadyStateChange()
         https://bugs.webkit.org/show_bug.cgi?id=134941
 

Modified: trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.cpp (171148 => 171149)


--- trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.cpp	2014-07-16 18:05:09 UTC (rev 171148)
+++ trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.cpp	2014-07-16 19:10:22 UTC (rev 171149)
@@ -121,12 +121,15 @@
 
 AudioHardwareListenerMac::AudioHardwareListenerMac(Client& client)
     : AudioHardwareListener(client)
+    , m_weakFactory(this)
 {
     setHardwareActivity(isAudioHardwareProcessRunning());
     setOutputDeviceSupportsLowPowerMode(currentDeviceSupportsLowPowerBufferSize());
 
+    auto weakThis = m_weakFactory.createWeakPtr();
     m_block = Block_copy(^(UInt32 count, const AudioObjectPropertyAddress properties[]) {
-        propertyChanged(count, properties);
+        if (weakThis)
+            weakThis->propertyChanged(count, properties);
     });
 
     AudioObjectAddPropertyListenerBlock(kAudioObjectSystemObject, &processIsRunningPropertyDescriptor(), dispatch_get_main_queue(), m_block);

Modified: trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.h (171148 => 171149)


--- trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.h	2014-07-16 18:05:09 UTC (rev 171148)
+++ trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.h	2014-07-16 19:10:22 UTC (rev 171149)
@@ -27,6 +27,7 @@
 #define AudioHardwareListenerMac_h
 
 #include "AudioHardwareListener.h"
+#include <wtf/WeakPtr.h>
 
 #if PLATFORM(MAC)
 
@@ -48,6 +49,7 @@
     void propertyChanged(UInt32, const AudioObjectPropertyAddress[]);
 
     AudioObjectPropertyListenerBlock m_block;
+    WeakPtrFactory<AudioHardwareListenerMac> m_weakFactory;
 };
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to