Index: Source/modules/webaudio/AudioContext.h |
diff --git a/Source/modules/webaudio/AudioContext.h b/Source/modules/webaudio/AudioContext.h |
index 52462a91b678158cadb5e841a9679d590ef182d6..9102268fb8eb529bc3b9781c6cf11a1f01e15f95 100644 |
--- a/Source/modules/webaudio/AudioContext.h |
+++ b/Source/modules/webaudio/AudioContext.h |
@@ -79,7 +79,10 @@ class WaveShaperNode; |
// AudioContext is the cornerstone of the web audio API and all AudioNodes are created from it. |
// For thread safety between the audio thread and the main thread, it has a rendering graph locking mechanism. |
-class AudioContext : public RefCountedGarbageCollectedEventTargetWithInlineData<AudioContext>, public ActiveDOMObject { |
+class AudioContext |
+ : public RefCountedGarbageCollectedEventTargetWithInlineData<AudioContext> |
+ , public ActiveDOMObject |
+ , private ThreadState::MarkingTask { |
DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<AudioContext>); |
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(AudioContext); |
DEFINE_WRAPPERTYPEINFO(); |
@@ -103,6 +106,8 @@ public: |
bool isInitialized() const { return m_isInitialized; } |
bool isOfflineContext() { return m_isOfflineContext; } |
+ AudioContextState contextState() const { return m_contextState; } |
+ void setLastZombie(void*); |
// Document notification |
virtual void stop() override final; |
@@ -290,6 +295,10 @@ private: |
void initialize(); |
void uninitialize(); |
+ // ThreadState::MarkingTask functions. |
+ void willStartMarking(ThreadState&) override; |
+ void didFinishMarking(ThreadState&) override; |
+ |
// ExecutionContext calls stop twice. |
// We'd like to schedule only one stop action for them. |
bool m_isStopScheduled; |
@@ -399,6 +408,10 @@ private: |
bool m_didInitializeContextGraphMutex; |
RecursiveMutex m_contextGraphMutex; |
volatile ThreadIdentifier m_audioThread; |
+ // Accessing m_last*Zombie should be protected by |
+ // m_didInitializeContextGraphMutex. |
+ void* m_lastZombie; |
+ void* m_lastRemovableZombie; |
// Only accessed in the audio thread. |
// Oilpan: Since items are added to these vectors by the audio thread (not registered to Oilpan), |