77#include " legacy/main/NodeJsHelper.h"
88#endif
99
10- #include < atomic>
1110#include < mutex>
11+ #include < shared_mutex>
1212
1313using namespace script ;
1414
@@ -19,19 +19,22 @@ void refreshEngineSnapshotLocked() {
1919 globalShareData->globalEngineList .begin (),
2020 globalShareData->globalEngineList .end ()
2121 );
22- globalShareData->globalEngineSnapshot .store (snapshot, std::memory_order_release);
22+
23+ std::unique_lock snapshotLock (globalShareData->engineSnapshotLock );
24+ globalShareData->globalEngineSnapshot = std::move (snapshot);
2325}
2426
2527std::shared_ptr<std::vector<std::shared_ptr<ScriptEngine>>> loadEngineSnapshot () {
26- return globalShareData->globalEngineSnapshot .load (std::memory_order_acquire);
28+ std::shared_lock snapshotLock (globalShareData->engineSnapshotLock );
29+ return globalShareData->globalEngineSnapshot ;
2730}
2831
2932} // namespace
3033
3134// /////////////////////////////// API /////////////////////////////////
3235
3336bool EngineManager::unregisterEngine (std::shared_ptr<ScriptEngine> const & toDelete) {
34- std::unique_lock lock (globalShareData->engineListLock );
37+ std::lock_guard lock (globalShareData->engineListLock );
3538 for (auto engine = globalShareData->globalEngineList .begin (); engine != globalShareData->globalEngineList .end ();
3639 ++engine) {
3740 if (*engine == toDelete) {
@@ -44,7 +47,7 @@ bool EngineManager::unregisterEngine(std::shared_ptr<ScriptEngine> const& toDele
4447}
4548
4649bool EngineManager::registerEngine (std::shared_ptr<ScriptEngine> const & engine) {
47- std::unique_lock lock (globalShareData->engineListLock );
50+ std::lock_guard lock (globalShareData->engineListLock );
4851 globalShareData->globalEngineList .push_back (engine);
4952 refreshEngineSnapshotLocked ();
5053 return true ;
0 commit comments