Add a mutex around SyncSet operations
BUG: 31072273
Change-Id: I037505ad3ab1ba80aecab4e24ec8d1932df2dcf7
Reviewed-on: https://swiftshader-review.googlesource.com/7030
Reviewed-by: Lingfeng Yang <lfy@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Lingfeng Yang <lfy@google.com>
diff --git a/src/OpenGL/libEGL/Display.cpp b/src/OpenGL/libEGL/Display.cpp
index 270c8fa..31be0e9 100644
--- a/src/OpenGL/libEGL/Display.cpp
+++ b/src/OpenGL/libEGL/Display.cpp
@@ -40,6 +40,22 @@
#include <vector>
#include <map>
+class Guard
+{
+public:
+ explicit Guard(sw::BackoffLock* in) : mMutex(in)
+ {
+ mMutex->lock();
+ }
+
+ ~Guard()
+ {
+ mMutex->unlock();
+ }
+protected:
+ sw::BackoffLock* mMutex;
+};
+
namespace egl
{
@@ -453,9 +469,8 @@
EGLSyncKHR Display::createSync(Context *context)
{
FenceSync *fenceSync = new egl::FenceSync(context);
-
+ Guard lk(&mSyncSetMutex);
mSyncSet.insert(fenceSync);
-
return fenceSync;
}
@@ -490,8 +505,10 @@
void Display::destroySync(FenceSync *sync)
{
- mSyncSet.erase(sync);
-
+ {
+ Guard lk(&mSyncSetMutex);
+ mSyncSet.erase(sync);
+ }
delete sync;
}
@@ -566,6 +583,7 @@
bool Display::isValidSync(FenceSync *sync)
{
+ Guard lk(&mSyncSetMutex);
return mSyncSet.find(sync) != mSyncSet.end();
}
diff --git a/src/OpenGL/libEGL/Display.h b/src/OpenGL/libEGL/Display.h
index acd639a..96e1453 100644
--- a/src/OpenGL/libEGL/Display.h
+++ b/src/OpenGL/libEGL/Display.h
@@ -20,6 +20,7 @@
#define INCLUDE_DISPLAY_H_
#include "Config.h"
+#include "Common/MutexLock.hpp"
#include "Sync.hpp"
#include "common/NameSpace.hpp"
@@ -91,6 +92,7 @@
ContextSet mContextSet;
typedef std::set<FenceSync*> SyncSet;
+ sw::BackoffLock mSyncSetMutex;
SyncSet mSyncSet;
gl::NameSpace<Image> mSharedImageNameSpace;