summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/luaproc.h3
-rw-r--r--libs/ardour/luaproc.cc7
2 files changed, 10 insertions, 0 deletions
diff --git a/libs/ardour/ardour/luaproc.h b/libs/ardour/ardour/luaproc.h
index d0560e9953..062aad9fff 100644
--- a/libs/ardour/ardour/luaproc.h
+++ b/libs/ardour/ardour/luaproc.h
@@ -142,6 +142,9 @@ private:
int64_t _stats_max[2];
int64_t _stats_cnt;
#endif
+
+ mutable Glib::Threads::Mutex debug_hack; // prevent concurrent calls to _lua_dsp() and _lua_params() -- test/debug
+
};
class LIBARDOUR_API LuaPluginInfo : public PluginInfo
diff --git a/libs/ardour/luaproc.cc b/libs/ardour/luaproc.cc
index a030691e9f..2669f3a03f 100644
--- a/libs/ardour/luaproc.cc
+++ b/libs/ardour/luaproc.cc
@@ -531,6 +531,7 @@ LuaProc::connect_and_run (BufferSet& bufs,
try {
if (_lua_does_channelmapping) {
+ Glib::Threads::Mutex::Lock lm (debug_hack);
// run the DSP function
(*_lua_dsp)(&bufs, in, out, nframes, offset);
} else {
@@ -594,6 +595,7 @@ LuaProc::connect_and_run (BufferSet& bufs,
}
+ Glib::Threads::Mutex::Lock lm (debug_hack);
// run the DSP function
(*_lua_dsp)(in_map, out_map, nframes);
}
@@ -747,6 +749,7 @@ LuaProc::default_value (uint32_t port)
return 0;
}
int lp = _ctrl_params[port].second;
+ Glib::Threads::Mutex::Lock lm (debug_hack);
luabridge::LuaRef lr = (*_lua_params)[lp];
return (lr["default"]).cast<float> ();
}
@@ -778,6 +781,7 @@ LuaProc::get_parameter_descriptor (uint32_t port, ParameterDescriptor& desc) con
assert (port <= parameter_count ());
int lp = _ctrl_params[port].second;
+ Glib::Threads::Mutex::Lock lm (debug_hack);
luabridge::LuaRef lr = (*_lua_params)[lp];
desc.lower = (lr["min"]).cast<float> ();
desc.upper = (lr["max"]).cast<float> ();
@@ -814,6 +818,7 @@ std::string
LuaProc::get_parameter_docs (uint32_t port) const {
assert (port <= parameter_count ());
int lp = _ctrl_params[port].second;
+ Glib::Threads::Mutex::Lock lm (debug_hack);
luabridge::LuaRef lr = (*_lua_params)[lp];
luabridge::LuaRef doc = lr["doc"];
if (doc.isString ()) {
@@ -864,6 +869,7 @@ LuaProc::describe_parameter (Evoral::Parameter param)
{
if (param.type () == PluginAutomation && param.id () < parameter_count ()) {
int lp = _ctrl_params[param.id ()].second;
+ Glib::Threads::Mutex::Lock lm (debug_hack);
luabridge::LuaRef lr = (*_lua_params)[lp];
return (lr["name"]).cast<std::string> ();
} else {
@@ -887,6 +893,7 @@ boost::shared_ptr<ScalePoints>
LuaProc::get_scale_points (uint32_t port) const
{
int lp = _ctrl_params[port].second;
+ Glib::Threads::Mutex::Lock lm (debug_hack);
luabridge::LuaRef lr = (*_lua_params)[lp];
if (!lr["scalepoints"].isTable()) {