From 5b475466daad1ac6aab3a95f2fcf6837ad8ad710 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Sat, 22 Jan 2022 00:31:10 -0500 Subject: Fix leak of scripting instances when new windows are created --- scriptingprovider.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'scriptingprovider.cpp') diff --git a/scriptingprovider.cpp b/scriptingprovider.cpp index 4c11ccc4..76cb67c2 100644 --- a/scriptingprovider.cpp +++ b/scriptingprovider.cpp @@ -54,6 +54,8 @@ ScriptingInstance::ScriptingInstance(ScriptingProvider* provider) BNScriptingInstanceCallbacks cb; cb.context = this; cb.destroyInstance = DestroyInstanceCallback; + cb.externalRefTaken = nullptr; + cb.externalRefReleased = nullptr; cb.executeScriptInput = ExecuteScriptInputCallback; cb.cancelScriptInput = CancelScriptInputCallback; cb.setCurrentBinaryView = SetCurrentBinaryViewCallback; @@ -62,6 +64,7 @@ ScriptingInstance::ScriptingInstance(ScriptingProvider* provider) cb.setCurrentAddress = SetCurrentAddressCallback; cb.setCurrentSelection = SetCurrentSelectionCallback; cb.completeInput = CompleteInputCallback; + cb.stop = StopCallback; AddRefForRegistration(); m_object = BNInitScriptingInstance(provider->GetObject(), &cb); } @@ -136,6 +139,13 @@ char* ScriptingInstance::CompleteInputCallback(void* ctxt, const char* text, uin } +void ScriptingInstance::StopCallback(void* ctxt) +{ + ScriptingInstance* instance = (ScriptingInstance*)ctxt; + instance->Stop(); +} + + void ScriptingInstance::DestroyInstance() { ReleaseForRegistration(); @@ -225,6 +235,11 @@ void ScriptingInstance::SetDelimiters(const std::string& delimiters) } +void ScriptingInstance::Stop() +{ +} + + CoreScriptingInstance::CoreScriptingInstance(BNScriptingInstance* instance): ScriptingInstance(instance) { } @@ -281,6 +296,12 @@ std::string CoreScriptingInstance::CompleteInput(const std::string& text, uint64 } +void CoreScriptingInstance::Stop() +{ + BNStopScriptingInstance(m_object); +} + + ScriptingProvider::ScriptingProvider(const string& name, const string& apiName): m_nameForRegister(name), m_apiNameForRegister(apiName) { } -- cgit v1.3.1