From 2d58789d66f1b63ad63304584c7ac43284b540b8 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Wed, 6 Jul 2016 20:52:04 +0200 Subject: Converted cLuaState::cTableRef to use cTrackedRef. This makes the table-based callbacks resistent to LuaState unloads and safer to use. --- src/Bindings/LuaNameLookup.cpp | 50 +++++------------------------------------- 1 file changed, 5 insertions(+), 45 deletions(-) (limited to 'src/Bindings/LuaNameLookup.cpp') diff --git a/src/Bindings/LuaNameLookup.cpp b/src/Bindings/LuaNameLookup.cpp index 3cbdbb5cf..3f55e7bc8 100644 --- a/src/Bindings/LuaNameLookup.cpp +++ b/src/Bindings/LuaNameLookup.cpp @@ -10,9 +10,8 @@ -cLuaNameLookup::cLuaNameLookup(const AString & a_Query, cPluginLua & a_Plugin, int a_CallbacksTableStackPos): - m_Plugin(a_Plugin), - m_Callbacks(cPluginLua::cOperation(a_Plugin)(), a_CallbacksTableStackPos), +cLuaNameLookup::cLuaNameLookup(const AString & a_Query, cLuaState::cTableRefPtr && a_Callbacks): + m_Callbacks(std::move(a_Callbacks)), m_Query(a_Query) { } @@ -23,20 +22,7 @@ cLuaNameLookup::cLuaNameLookup(const AString & a_Query, cPluginLua & a_Plugin, i void cLuaNameLookup::OnNameResolved(const AString & a_Name, const AString & a_IP) { - // Check if we're still valid: - if (!m_Callbacks.IsValid()) - { - return; - } - - // Call the callback: - cPluginLua::cOperation Op(m_Plugin); - if (!Op().Call(cLuaState::cTableRef(m_Callbacks, "OnNameResolved"), a_Name, a_IP)) - { - LOGINFO("cNetwork name lookup OnNameResolved callback failed in plugin %s looking up %s. %s resolves to %s.", - m_Plugin.GetName().c_str(), m_Query.c_str(), a_Name.c_str(), a_IP.c_str() - ); - } + m_Callbacks->CallTableFn("OnNameResolved", a_Name, a_IP); } @@ -45,20 +31,7 @@ void cLuaNameLookup::OnNameResolved(const AString & a_Name, const AString & a_IP void cLuaNameLookup::OnError(int a_ErrorCode, const AString & a_ErrorMsg) { - // Check if we're still valid: - if (!m_Callbacks.IsValid()) - { - return; - } - - // Call the callback: - cPluginLua::cOperation Op(m_Plugin); - if (!Op().Call(cLuaState::cTableRef(m_Callbacks, "OnError"), m_Query, a_ErrorCode, a_ErrorMsg)) - { - LOGINFO("cNetwork name lookup OnError callback failed in plugin %s looking up %s. The error is %d (%s)", - m_Plugin.GetName().c_str(), m_Query.c_str(), a_ErrorCode, a_ErrorMsg.c_str() - ); - } + m_Callbacks->CallTableFn("OnError", m_Query, a_ErrorCode, a_ErrorMsg); } @@ -67,20 +40,7 @@ void cLuaNameLookup::OnError(int a_ErrorCode, const AString & a_ErrorMsg) void cLuaNameLookup::OnFinished(void) { - // Check if we're still valid: - if (!m_Callbacks.IsValid()) - { - return; - } - - // Call the callback: - cPluginLua::cOperation Op(m_Plugin); - if (!Op().Call(cLuaState::cTableRef(m_Callbacks, "OnFinished"), m_Query)) - { - LOGINFO("cNetwork name lookup OnFinished callback failed in plugin %s, looking up %s.", - m_Plugin.GetName().c_str(), m_Query.c_str() - ); - } + m_Callbacks->CallTableFn("OnFinished", m_Query); } -- cgit v1.2.3