Changeset 171149 in webkit


Ignore:
Timestamp:
Jul 16, 2014 12:10:22 PM (10 years ago)
Author:
jer.noble@apple.com
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:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r171148 r171149  
     12014-07-16  Jer Noble  <jer.noble@apple.com>
     2
     3        REGRESSION(r171069) 75% repro crash in WebCore::AudioHardwareListenerMac::processIsRunningChanged()
     4        https://bugs.webkit.org/show_bug.cgi?id=134986
     5
     6        Reviewed by Eric Carlson.
     7
     8        Add a WeakPtrFactory to AudioHardwareListenerMac, so that if CoreAudio calls our block after
     9        being unregistered, we can bail early instead of calling into a deleted object.
     10
     11        * platform/audio/mac/AudioHardwareListenerMac.cpp:
     12        (WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac):
     13        * platform/audio/mac/AudioHardwareListenerMac.h:
     14
    1152014-07-16  Jer Noble  <jer.noble@apple.com>
    216
  • trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.cpp

    r171069 r171149  
    122122AudioHardwareListenerMac::AudioHardwareListenerMac(Client& client)
    123123    : AudioHardwareListener(client)
     124    , m_weakFactory(this)
    124125{
    125126    setHardwareActivity(isAudioHardwareProcessRunning());
    126127    setOutputDeviceSupportsLowPowerMode(currentDeviceSupportsLowPowerBufferSize());
    127128
     129    auto weakThis = m_weakFactory.createWeakPtr();
    128130    m_block = Block_copy(^(UInt32 count, const AudioObjectPropertyAddress properties[]) {
    129         propertyChanged(count, properties);
     131        if (weakThis)
     132            weakThis->propertyChanged(count, properties);
    130133    });
    131134
  • trunk/Source/WebCore/platform/audio/mac/AudioHardwareListenerMac.h

    r171069 r171149  
    2828
    2929#include "AudioHardwareListener.h"
     30#include <wtf/WeakPtr.h>
    3031
    3132#if PLATFORM(MAC)
     
    4950
    5051    AudioObjectPropertyListenerBlock m_block;
     52    WeakPtrFactory<AudioHardwareListenerMac> m_weakFactory;
    5153};
    5254
Note: See TracChangeset for help on using the changeset viewer.