Bug 774388 - Patch 7: Block the main thread on compositor shutdown - r=mattwoodrow

This commit is contained in:
Benoit Jacob 2014-07-04 14:04:11 -04:00
parent 0ca5d63344
commit ff512281c2
2 changed files with 10 additions and 0 deletions

View File

@ -136,6 +136,7 @@ private:
};
static StaticRefPtr<CompositorThreadHolder> sCompositorThreadHolder;
static bool sFinishedCompositorShutDown = false;
static MessageLoop* sMainLoop = nullptr;
@ -178,6 +179,7 @@ CompositorThreadHolder::DestroyCompositorThread(Thread* aCompositorThread)
DestroyCompositorMap();
ReleaseImageBridgeParentSingleton();
delete aCompositorThread;
sFinishedCompositorShutDown = true;
}
static Thread* CompositorThread() {
@ -203,6 +205,12 @@ void CompositorParent::ShutDown()
MOZ_ASSERT(sCompositorThreadHolder, "The compositor thread has already been shut down!");
sCompositorThreadHolder = nullptr;
// No locking is needed around sFinishedCompositorShutDown because it is only
// ever accessed on the main thread.
while (!sFinishedCompositorShutDown) {
NS_ProcessNextEvent(nullptr, true);
}
}
MessageLoop* CompositorParent::CompositorLoop()

View File

@ -170,6 +170,8 @@ public:
/**
* Waits for all [CrossProcess]CompositorParent's to be gone,
* and destroys the compositor thread and global compositor map.
*
* Does not return until all of that has completed.
*/
static void ShutDown();