Fix Vulkan semaphore data race
Fixes a data race in VkSemaphoreExternalLinux.hpp caused by the static
counter variable not being atomic.
Confirmed to fix a TSAN error found in Dawn tests using SwiftShader.
Bug: chromium:454630430
Change-Id: I008351b1d749ed0c9611087741694a6dd47b0381
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/76648
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Tested-by: Yuly Novikov <ynovikov@chromium.org>
Tested-by: Shahbaz Youssefi <syoussefi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Presubmit-Ready: Yuly Novikov <ynovikov@chromium.org>
diff --git a/src/Vulkan/VkSemaphoreExternalLinux.hpp b/src/Vulkan/VkSemaphoreExternalLinux.hpp
index 3689ad9..6578fa0 100644
--- a/src/Vulkan/VkSemaphoreExternalLinux.hpp
+++ b/src/Vulkan/VkSemaphoreExternalLinux.hpp
@@ -18,6 +18,7 @@
#include "System/Linux/MemFd.hpp"
#include "System/Memory.hpp"
+#include <atomic>
#include <errno.h>
#include <pthread.h>
#include <string.h>
@@ -142,7 +143,7 @@
const size_t size = sw::memoryPageSize();
// To be exportable, the PosixSemaphore must be stored in a shared
// memory region.
- static int counter = 0;
+ static std::atomic<int> counter = 0;
char name[40];
snprintf(name, sizeof(name), "SwiftShader.Semaphore.%d", ++counter);
if(!memfd.allocate(name, size))