aboutsummaryrefslogtreecommitdiff
path: root/layers/threading.h
diff options
context:
space:
mode:
authorMike Stroyan <stroyan@google.com>2016-02-08 10:27:55 -0700
committerMike Stroyan <stroyan@google.com>2016-02-08 10:27:55 -0700
commit7ee1c6d9619fa9dc66939ccd8756c393a18117f8 (patch)
treed45270689b5f5948bfe4c9f7b403ae4e18f1fec8 /layers/threading.h
parentd3246ce01b82ceded02211e8a95ef57204a93701 (diff)
downloadusermoji-7ee1c6d9619fa9dc66939ccd8756c393a18117f8.tar.xz
layers: lock use of threading layer cmd pool map
Access to command_pool_map data structure in threading validation layer needs a mutex.
Diffstat (limited to 'layers/threading.h')
-rw-r--r--layers/threading.h20
1 files changed, 16 insertions, 4 deletions
diff --git a/layers/threading.h b/layers/threading.h
index a0b025f7..c6315d2a 100644
--- a/layers/threading.h
+++ b/layers/threading.h
@@ -313,7 +313,10 @@ static std::unordered_map<VkCommandBuffer, VkCommandPool> command_pool_map;
static void startWriteObject(struct layer_data *my_data, VkCommandBuffer object, bool lockPool=true)
{
if (lockPool) {
- startWriteObject(my_data, command_pool_map[object]);
+ loader_platform_thread_lock_mutex(&threadingLock);
+ VkCommandPool pool = command_pool_map[object];
+ loader_platform_thread_unlock_mutex(&threadingLock);
+ startWriteObject(my_data, pool);
}
my_data->c_VkCommandBuffer.startWrite(my_data->report_data, object);
}
@@ -321,17 +324,26 @@ static void finishWriteObject(struct layer_data *my_data, VkCommandBuffer object
{
my_data->c_VkCommandBuffer.finishWrite(object);
if (lockPool) {
- finishWriteObject(my_data, command_pool_map[object]);
+ loader_platform_thread_lock_mutex(&threadingLock);
+ VkCommandPool pool = command_pool_map[object];
+ loader_platform_thread_unlock_mutex(&threadingLock);
+ finishWriteObject(my_data, pool);
}
}
static void startReadObject(struct layer_data *my_data, VkCommandBuffer object)
{
- startReadObject(my_data, command_pool_map[object]);
+ loader_platform_thread_lock_mutex(&threadingLock);
+ VkCommandPool pool = command_pool_map[object];
+ loader_platform_thread_unlock_mutex(&threadingLock);
+ startReadObject(my_data, pool);
my_data->c_VkCommandBuffer.startRead(my_data->report_data, object);
}
static void finishReadObject(struct layer_data *my_data, VkCommandBuffer object)
{
my_data->c_VkCommandBuffer.finishRead(object);
- finishReadObject(my_data, command_pool_map[object]);
+ loader_platform_thread_lock_mutex(&threadingLock);
+ VkCommandPool pool = command_pool_map[object];
+ loader_platform_thread_unlock_mutex(&threadingLock);
+ finishReadObject(my_data, pool);
}
#endif // THREADING_H