diff --git a/src/scripts/CMakeLists.txt b/src/scripts/CMakeLists.txt index 39f05dff..42159135 100644 --- a/src/scripts/CMakeLists.txt +++ b/src/scripts/CMakeLists.txt @@ -70,9 +70,9 @@ foreach(_scriptDir ${children}) ) else() add_custom_command(TARGET "script_${_name}" POST_BUILD - COMMAND ${CMAKE_COMMAND} -E touch ${SCRIPT_POSTBUILD_DIR}/$_LOCK + COMMAND ${CMAKE_COMMAND} -E touch ${SCRIPT_POSTBUILD_DIR}$_LOCK COMMAND ${CMAKE_COMMAND} -E copy_if_different $ ${SCRIPT_POSTBUILD_DIR} - COMMAND ${CMAKE_COMMAND} -E remove ${SCRIPT_POSTBUILD_DIR}/$_LOCK + COMMAND ${CMAKE_COMMAND} -E remove ${SCRIPT_POSTBUILD_DIR}$_LOCK ) endif() diff --git a/src/world/Script/NativeScriptMgr.cpp b/src/world/Script/NativeScriptMgr.cpp index e932c0f7..9ce22785 100644 --- a/src/world/Script/NativeScriptMgr.cpp +++ b/src/world/Script/NativeScriptMgr.cpp @@ -9,6 +9,8 @@ namespace Sapphire::Scripting bool NativeScriptMgr::loadScript( const std::string& path ) { + std::scoped_lock lock( m_mutex ); + auto module = m_loader.loadModule( path ); if( !module ) return false; @@ -47,11 +49,15 @@ namespace Sapphire::Scripting const std::string NativeScriptMgr::getModuleExtension() { + std::scoped_lock lock( m_mutex ); + return m_loader.getModuleExtension(); } bool NativeScriptMgr::unloadScript( const std::string& name ) { + std::scoped_lock lock( m_mutex ); + auto info = m_loader.getScriptInfo( name ); if( !info ) return false; @@ -61,6 +67,8 @@ namespace Sapphire::Scripting bool NativeScriptMgr::unloadScript( ScriptInfo* info ) { + std::scoped_lock lock( m_mutex ); + for( auto& script : info->scripts ) { m_scripts[ script->getType() ].erase( script->getId() ); @@ -83,11 +91,14 @@ namespace Sapphire::Scripting if( !unloadScript( info ) ) return; + std::scoped_lock lock( m_mutex ); m_scriptLoadQueue.push( libPath ); } void NativeScriptMgr::processLoadQueue() { + std::scoped_lock lock( m_mutex ); + std::vector< std::string > deferredLoads; while( !m_scriptLoadQueue.empty() ) @@ -110,11 +121,15 @@ namespace Sapphire::Scripting void NativeScriptMgr::findScripts( std::set< Sapphire::Scripting::ScriptInfo* >& scripts, const std::string& search ) { + std::scoped_lock lock( m_mutex ); + return m_loader.findScripts( scripts, search ); } bool NativeScriptMgr::isModuleLoaded( const std::string& name ) { + std::scoped_lock lock( m_mutex ); + return m_loader.isModuleLoaded( name ); } diff --git a/src/world/Script/NativeScriptMgr.h b/src/world/Script/NativeScriptMgr.h index 668408a0..d7c56c40 100644 --- a/src/world/Script/NativeScriptMgr.h +++ b/src/world/Script/NativeScriptMgr.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "ScriptLoader.h" @@ -29,6 +30,8 @@ namespace Sapphire::Scripting */ std::queue< std::string > m_scriptLoadQueue; + std::recursive_mutex m_mutex; + /*! * @brief Used to unload a script *