diff options
| author | Mike Stroyan <stroyan@google.com> | 2016-02-08 10:27:55 -0700 |
|---|---|---|
| committer | Mike Stroyan <stroyan@google.com> | 2016-02-08 10:27:55 -0700 |
| commit | 7ee1c6d9619fa9dc66939ccd8756c393a18117f8 (patch) | |
| tree | d45270689b5f5948bfe4c9f7b403ae4e18f1fec8 /layers/threading.h | |
| parent | d3246ce01b82ceded02211e8a95ef57204a93701 (diff) | |
| download | usermoji-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.h | 20 |
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 |
