From 7bc7c9d2f467bbabefc5d0897460344237c927e8 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sat, 20 Apr 2024 01:33:34 +0200 Subject: [PATCH] Engine: simplify "script" command callback for server Code actually doesn't need to be ran in the server frame thread. All the code really does is preparation work. Run it in the main thread but do join the server frame thread (FCVAR_SERVER_FRAME_THREAD) as we can't do concurrent work on the server VM. --- src/engine/server/server.cpp | 14 -------------- src/engine/server/server.h | 3 --- src/engine/sys_dll.cpp | 5 +---- src/game/server/vscript_server.cpp | 12 ------------ src/vscript/vscript.cpp | 6 +----- 5 files changed, 2 insertions(+), 38 deletions(-) diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index d241972c..30359c62 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -218,17 +218,6 @@ void CServer::BroadcastMessage(CNetMessage* const msg, const bool onlyActive, co //--------------------------------------------------------------------------------- void CServer::FrameJob(double flFrameTime, bool bRunOverlays, bool bUpdateFrame) { - for (IFrameTask* const& task : g_ServerTaskQueueList) - { - task->RunFrame(); - } - - g_ServerTaskQueueList.erase(std::remove_if(g_ServerTaskQueueList.begin(), - g_ServerTaskQueueList.end(), [](const IFrameTask* task) - { - return task->IsFinished(); - }), g_ServerTaskQueueList.end()); - CServer__FrameJob(flFrameTime, bRunOverlays, bUpdateFrame); LiveAPISystem()->RunFrame(); } @@ -254,6 +243,3 @@ void VServer::Detour(const bool bAttach) const /////////////////////////////////////////////////////////////////////////////// CServer* g_pServer = nullptr; CClientExtended CServer::sm_ClientsExtended[MAX_PLAYERS]; - -std::list g_ServerTaskQueueList; -CFrameTask g_ServerTaskQueue; diff --git a/src/engine/server/server.h b/src/engine/server/server.h index e0ba76f4..ffbb1fac 100644 --- a/src/engine/server/server.h +++ b/src/engine/server/server.h @@ -112,9 +112,6 @@ static_assert(sizeof(CServer) == 0x25264C0); extern CServer* g_pServer; -extern std::list g_ServerTaskQueueList; -extern CFrameTask g_ServerTaskQueue; - extern ConVar sv_showconnecting; extern ConVar sv_pylonVisibility; diff --git a/src/engine/sys_dll.cpp b/src/engine/sys_dll.cpp index 5dc20100..e65fa81d 100644 --- a/src/engine/sys_dll.cpp +++ b/src/engine/sys_dll.cpp @@ -117,11 +117,8 @@ bool CModAppSystemGroup::StaticCreate(CModAppSystemGroup* pModAppSystemGroup) } g_TaskQueueList.push_back(&g_TaskQueue); -#ifndef CLIENT_DLL - g_ServerTaskQueueList.push_back(&g_ServerTaskQueue); -#endif // !CLIENT_DLL - g_bAppSystemInit = true; + return CModAppSystemGroup__Create(pModAppSystemGroup); } diff --git a/src/game/server/vscript_server.cpp b/src/game/server/vscript_server.cpp index 8e6cdb63..0ca711d9 100644 --- a/src/game/server/vscript_server.cpp +++ b/src/game/server/vscript_server.cpp @@ -31,18 +31,6 @@ static void SQVM_ServerScript_f(const CCommand& args) { if (args.ArgC() >= 2) { - const char* code = args.ArgS(); - - if (!ThreadInServerFrameThread()) - { - const string scode(code); - g_ServerTaskQueue.Dispatch([scode]() - { - Script_Execute(scode.c_str(), SQCONTEXT::SERVER); - }, 0); - return; // Only run in server frame thread. - } - Script_Execute(args.ArgS(), SQCONTEXT::SERVER); } } diff --git a/src/vscript/vscript.cpp b/src/vscript/vscript.cpp index 41064fc3..ab0de695 100644 --- a/src/vscript/vscript.cpp +++ b/src/vscript/vscript.cpp @@ -133,11 +133,7 @@ SQBool Script_PrecompileClientScripts(CSquirrelVM* vm) void Script_Execute(const SQChar* code, const SQCONTEXT context) { Assert(context != SQCONTEXT::NONE); - - if (context == SQCONTEXT::CLIENT || context == SQCONTEXT::UI) - Assert(ThreadInMainThread()); - else if (context == SQCONTEXT::SERVER) - Assert(ThreadInServerFrameThread()); + Assert(ThreadInMainOrServerFrameThread()); CSquirrelVM* s = Script_GetScriptHandle(context); const char* const contextName = s_scriptContextNames[(int)context];