Vulkan: lock around accesses to mSharedGarbage

Bug: b/168744476
Change-Id: I26205e7d29260ffdefbd5b2971b570c8bff7187f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2416236
Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
This commit is contained in:
Courtney Goeltzenleuchter 2020-09-17 08:25:40 -06:00 коммит произвёл Commit Bot
Родитель fbab23e186
Коммит e1f7e2def9
2 изменённых файлов: 11 добавлений и 3 удалений

Просмотреть файл

@ -480,7 +480,13 @@ RendererVk::~RendererVk()
{ {
mAllocator.release(); mAllocator.release();
mPipelineCache.release(); mPipelineCache.release();
ASSERT(mSharedGarbage.empty()); ASSERT(!hasSharedGarbage());
}
bool RendererVk::hasSharedGarbage()
{
std::lock_guard<std::mutex> lock(mGarbageMutex);
return !mSharedGarbage.empty();
} }
void RendererVk::onDestroy() void RendererVk::onDestroy()
@ -503,7 +509,7 @@ void RendererVk::onDestroy()
// Then assign an infinite "last completed" serial to force garbage to delete. // Then assign an infinite "last completed" serial to force garbage to delete.
mLastCompletedQueueSerial = Serial::Infinite(); mLastCompletedQueueSerial = Serial::Infinite();
(void)cleanupGarbage(true); (void)cleanupGarbage(true);
ASSERT(mSharedGarbage.empty()); ASSERT(!hasSharedGarbage());
for (PendingOneOffCommands &pending : mPendingOneOffCommands) for (PendingOneOffCommands &pending : mPendingOneOffCommands)
{ {
@ -2271,7 +2277,7 @@ bool RendererVk::hasFormatFeatureBits(VkFormat format, const VkFormatFeatureFlag
angle::Result RendererVk::cleanupGarbage(bool block) angle::Result RendererVk::cleanupGarbage(bool block)
{ {
std::lock_guard<decltype(mGarbageMutex)> lock(mGarbageMutex); std::lock_guard<std::mutex> lock(mGarbageMutex);
for (auto garbageIter = mSharedGarbage.begin(); garbageIter != mSharedGarbage.end();) for (auto garbageIter = mSharedGarbage.begin(); garbageIter != mSharedGarbage.end();)
{ {

Просмотреть файл

@ -83,6 +83,7 @@ class RendererVk : angle::NonCopyable
void notifyDeviceLost(); void notifyDeviceLost();
bool isDeviceLost() const; bool isDeviceLost() const;
bool hasSharedGarbage();
std::string getVendorString() const; std::string getVendorString() const;
std::string getRendererDescription() const; std::string getRendererDescription() const;
@ -226,6 +227,7 @@ class RendererVk : angle::NonCopyable
{ {
if (!sharedGarbage.empty()) if (!sharedGarbage.empty())
{ {
std::lock_guard<std::mutex> lock(mGarbageMutex);
mSharedGarbage.emplace_back(std::move(use), std::move(sharedGarbage)); mSharedGarbage.emplace_back(std::move(use), std::move(sharedGarbage));
} }
} }