aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmma Miler <emma.pi@protonmail.com>2022-12-09 01:03:57 +0100
committerGitHub <noreply@github.com>2022-12-08 19:03:57 -0500
commit778c93587a9551debcc62ee1be9ef49f78295b49 (patch)
tree45bc274895a455c1442ceca43f5988756a66a66e
parent2d59006262d6e45f41ee325af78433475884dca4 (diff)
downloadNorthstarLauncher-778c93587a9551debcc62ee1be9ef49f78295b49.tar.gz
NorthstarLauncher-778c93587a9551debcc62ee1be9ef49f78295b49.zip
Fix UI VM Destruction (#349)
The functions in question take a CSquirrelVM* instead of an HSquirrelVM*, which causes IsUIVM() always returns false.
-rw-r--r--NorthstarDLL/squirrel.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/NorthstarDLL/squirrel.cpp b/NorthstarDLL/squirrel.cpp
index 02ca651e..a5733784 100644
--- a/NorthstarDLL/squirrel.cpp
+++ b/NorthstarDLL/squirrel.cpp
@@ -317,18 +317,20 @@ template <ScriptContext context> CSquirrelVM* __fastcall CreateNewVMHook(void* a
return sqvm;
}
-template <ScriptContext context> void (*__fastcall DestroyVM)(void* a1, HSquirrelVM* sqvm);
-template <ScriptContext context> void __fastcall DestroyVMHook(void* a1, HSquirrelVM* sqvm)
+template <ScriptContext context> void (*__fastcall DestroyVM)(void* a1, CSquirrelVM* sqvm);
+template <ScriptContext context> void __fastcall DestroyVMHook(void* a1, CSquirrelVM* sqvm)
{
ScriptContext realContext = context; // ui and client use the same function so we use this for prints
- if (IsUIVM(context, sqvm))
+ if (IsUIVM(context, sqvm->sqvm))
{
realContext = ScriptContext::UI;
g_pSquirrel<ScriptContext::UI>->VMDestroyed();
+ // Don't call DestroyVM here because it crashes.
+ // Respawn Code :tm:
}
else
{
- g_pSquirrel<context>->m_pSQVM = nullptr; // Fixes a race-like bug
+ g_pSquirrel<context>->VMDestroyed();
DestroyVM<context>(a1, sqvm);
}