X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fluainstance.cc;h=c813eeea63dafca66b860c9d1d6da6f9e255fe8f;hb=dde13d288e22ba5dd8e23802c47fac288b089c57;hp=fe91bb95620e2ab8ff99722396c8106f5447cccd;hpb=e9a2eea8678708620d80d14290d234b29472044d;p=ardour.git diff --git a/gtk2_ardour/luainstance.cc b/gtk2_ardour/luainstance.cc index fe91bb9562..c813eeea63 100644 --- a/gtk2_ardour/luainstance.cc +++ b/gtk2_ardour/luainstance.cc @@ -40,6 +40,7 @@ #include "time_axis_view.h" #include "selection.h" #include "script_selector.h" +#include "timers.h" #include "utils_videotl.h" #include "pbd/i18n.h" @@ -355,6 +356,8 @@ const char *luasignalstr[] = { using namespace ARDOUR; +PBD::Signal0 LuaInstance::LuaTimerDS; + void LuaInstance::register_hooks (lua_State* L) { @@ -986,12 +989,15 @@ void LuaInstance::set_session (Session* s) for (LuaCallbackMap::iterator i = _callbacks.begin(); i != _callbacks.end(); ++i) { i->second->set_session (s); } + point_one_second_connection = Timers::rapid_connect (sigc::mem_fun(*this, & LuaInstance::every_point_one_seconds)); } void LuaInstance::session_going_away () { ENSURE_GUI_THREAD (*this, &LuaInstance::session_going_away); + point_one_second_connection.disconnect (); + (*_lua_clear)(); for (int i = 0; i < 9; ++i) { ActionChanged (i, ""); /* EMIT SIGNAL */ @@ -1004,6 +1010,12 @@ LuaInstance::session_going_away () lua.do_command ("collectgarbage();"); } +void +LuaInstance::every_point_one_seconds () +{ + LuaTimerDS (); // emit signal +} + int LuaInstance::set_state (const XMLNode& node) { @@ -1147,6 +1159,7 @@ LuaInstance::call_action (const int id) { try { (*_lua_call_action)(id + 1); + lua.collect_garbage_step (); } catch (luabridge::LuaException const& e) { cerr << "LuaException:" << e.what () << endl; } @@ -1633,11 +1646,13 @@ LuaCallback::set_session (ARDOUR::Session *s) { SessionHandlePtr::set_session (s); - if (_session) { - lua_State* L = lua.getState(); - LuaBindings::set_session (L, _session); + if (!_session) { + return; } + lua_State* L = lua.getState(); + LuaBindings::set_session (L, _session); + reconnect(); } @@ -1651,6 +1666,10 @@ LuaCallback::session_going_away () _session = 0; drop_callback (); /* EMIT SIGNAL */ + + lua_State* L = lua.getState(); + LuaBindings::set_session (L, 0); + lua.do_command ("collectgarbage();"); } void