mock_icd: Add missing locks
authorCharles Giessen <charles@lunarg.com>
Fri, 17 Mar 2023 22:40:25 +0000 (16:40 -0600)
committerJuan Ramos <114601453+juan-lunarg@users.noreply.github.com>
Fri, 17 Mar 2023 23:09:14 +0000 (17:09 -0600)
icd/generated/mock_icd.cpp
scripts/mock_icd_generator.py

index 9c9d527..b3bf813 100644 (file)
@@ -549,6 +549,7 @@ static VKAPI_ATTR void VKAPI_CALL FreeMemory(
     const VkAllocationCallbacks*                pAllocator)
 {
 //Destroy object
+    unique_lock_t lock(global_lock);
     allocated_memory_size_map.erase(memory);
 }
 
@@ -640,6 +641,7 @@ static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(
     pMemoryRequirements->alignment = 1;
     pMemoryRequirements->memoryTypeBits = 0xFFFF;
     // Return a better size based on the buffer size from the create info.
+    unique_lock_t lock(global_lock);
     auto d_iter = buffer_map.find(device);
     if (d_iter != buffer_map.end()) {
         auto iter = d_iter->second.find(buffer);
@@ -657,6 +659,7 @@ static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(
     pMemoryRequirements->size = 0;
     pMemoryRequirements->alignment = 1;
 
+    unique_lock_t lock(global_lock);
     auto d_iter = image_memory_size_map.find(device);
     if(d_iter != image_memory_size_map.end()){
         auto iter = d_iter->second.find(image);
index e4892bd..b6c460b 100644 (file)
@@ -988,6 +988,7 @@ CUSTOM_C_INTERCEPTS = {
     pMemoryRequirements->alignment = 1;
     pMemoryRequirements->memoryTypeBits = 0xFFFF;
     // Return a better size based on the buffer size from the create info.
+    unique_lock_t lock(global_lock);
     auto d_iter = buffer_map.find(device);
     if (d_iter != buffer_map.end()) {
         auto iter = d_iter->second.find(buffer);
@@ -1003,6 +1004,7 @@ CUSTOM_C_INTERCEPTS = {
     pMemoryRequirements->size = 0;
     pMemoryRequirements->alignment = 1;
 
+    unique_lock_t lock(global_lock);
     auto d_iter = image_memory_size_map.find(device);
     if(d_iter != image_memory_size_map.end()){
         auto iter = d_iter->second.find(image);
@@ -1732,6 +1734,7 @@ class MockICDOutputGenerator(OutputGenerator):
             self.appendSection('command', '//Destroy object')
             if 'FreeMemory' in api_function_name:
                 # Remove from allocation map
+                self.appendSection('command', '    unique_lock_t lock(global_lock);')
                 self.appendSection('command', '    allocated_memory_size_map.erase(memory);')
         else:
             self.appendSection('command', '//Not a CREATE or DESTROY function')