diff --git a/src/scripts/CMakeLists.txt b/src/scripts/CMakeLists.txt index a3e4d733..31cc1334 100644 --- a/src/scripts/CMakeLists.txt +++ b/src/scripts/CMakeLists.txt @@ -64,15 +64,15 @@ foreach(_scriptDir ${children}) COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.exp" COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.lib" COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.ilk" - COMMAND ${CMAKE_COMMAND} -E copy "${SCRIPT_LIB_DIR}/script_${_name}.dll" ${SCRIPT_POSTBUILD_DIR}${ScriptTargetName}.dll_LOCK + COMMAND ${CMAKE_COMMAND} -E copy "${SCRIPT_LIB_DIR}/script_${_name}.dll" ${SCRIPT_POSTBUILD_DIR}${ScriptTargetName}_LOCK COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SCRIPT_LIB_DIR}/script_${_name}.dll" ${SCRIPT_POSTBUILD_DIR}${ScriptTargetName}.dll - COMMAND ${CMAKE_COMMAND} -E remove ${SCRIPT_POSTBUILD_DIR}${ScriptTargetName}.dll_LOCK + COMMAND ${CMAKE_COMMAND} -E remove ${SCRIPT_POSTBUILD_DIR}${ScriptTargetName}_LOCK ) else() add_custom_command(TARGET "script_${_name}" POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy $ ${SCRIPT_POSTBUILD_DIR}$_LOCK + COMMAND ${CMAKE_COMMAND} -E copy $ ${SCRIPT_POSTBUILD_DIR}${ScriptTargetName}_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}${ScriptTargetName}_LOCK ) endif() diff --git a/src/world/Script/NativeScriptMgr.cpp b/src/world/Script/NativeScriptMgr.cpp index 9ce22785..d0c67e91 100644 --- a/src/world/Script/NativeScriptMgr.cpp +++ b/src/world/Script/NativeScriptMgr.cpp @@ -81,6 +81,8 @@ namespace Sapphire::Scripting void NativeScriptMgr::queueScriptReload( const std::string& name ) { + std::scoped_lock lock( m_mutex ); + auto info = m_loader.getScriptInfo( name ); if( !info ) return; @@ -91,7 +93,6 @@ namespace Sapphire::Scripting if( !unloadScript( info ) ) return; - std::scoped_lock lock( m_mutex ); m_scriptLoadQueue.push( libPath ); } diff --git a/src/world/Script/ScriptLoader.cpp b/src/world/Script/ScriptLoader.cpp index 59d36ea6..39807202 100644 --- a/src/world/Script/ScriptLoader.cpp +++ b/src/world/Script/ScriptLoader.cpp @@ -75,7 +75,8 @@ Sapphire::Scripting::ScriptInfo* Sapphire::Scripting::ScriptLoader::loadModule( fs::path dest( cacheDir /= f.filename().string() ); // make sure the module has finished building before trying to copy it - if( fs::exists( f.string() + "_LOCK" ) ) + const std::string readyFile( ( f.parent_path() / f.stem() ).string() + "_LOCK" ); + if( fs::exists( readyFile ) ) return nullptr; try @@ -112,7 +113,6 @@ Sapphire::Scripting::ScriptInfo* Sapphire::Scripting::ScriptLoader::loadModule( info->library_path = f.string(); m_scriptMap.insert( std::make_pair( f.stem().string(), info ) ); - return info; }