layers: lock use of threading layer cmd pool map

Access to command_pool_map data structure in threading validation layer
needs a mutex.
diff --git a/layers/threading.cpp b/layers/threading.cpp
index fcdd38b..db59aa9 100644
--- a/layers/threading.cpp
+++ b/layers/threading.cpp
@@ -357,7 +357,9 @@
     // Record mapping from command buffer to command pool
     if (VK_SUCCESS == result) {
         for (int index=0;index<pAllocateInfo->commandBufferCount;index++) {
+            loader_platform_thread_lock_mutex(&threadingLock);
             command_pool_map[pCommandBuffers[index]] = pAllocateInfo->commandPool;
+            loader_platform_thread_unlock_mutex(&threadingLock);
         }
     }
 
@@ -385,7 +387,9 @@
     finishWriteObject(my_data, commandPool);
     for (int index=0;index<commandBufferCount;index++) {
         finishWriteObject(my_data, pCommandBuffers[index], lockCommandPool);
+        loader_platform_thread_lock_mutex(&threadingLock);
         command_pool_map.erase(pCommandBuffers[index]);
+        loader_platform_thread_unlock_mutex(&threadingLock);
     }
 }
 
diff --git a/layers/threading.h b/layers/threading.h
index a0b025f..c6315d2 100644
--- a/layers/threading.h
+++ b/layers/threading.h
@@ -313,7 +313,10 @@
 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 @@
 {
     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