a few strategic LocaleGuards..
..to prevent switching forth and back during individual ::state(), ::set_state() when loading/saving the session or locating.
This commit is contained in:
parent
2066afe28c
commit
e59ab55831
|
@ -2704,6 +2704,7 @@ Route::get_template()
|
|||
XMLNode&
|
||||
Route::state(bool full_state)
|
||||
{
|
||||
LocaleGuard lg;
|
||||
if (!_session._template_state_dir.empty()) {
|
||||
assert (!full_state); // only for templates
|
||||
foreach_processor (sigc::bind (sigc::mem_fun (*this, &Route::set_plugin_state_dir), _session._template_state_dir));
|
||||
|
|
|
@ -561,6 +561,7 @@ Session::immediately_post_engine ()
|
|||
}
|
||||
|
||||
try {
|
||||
LocaleGuard lg;
|
||||
BootMessage (_("Set up LTC"));
|
||||
setup_ltc ();
|
||||
BootMessage (_("Set up Click"));
|
||||
|
|
|
@ -1037,6 +1037,7 @@ Session::get_template()
|
|||
XMLNode&
|
||||
Session::state (bool full_state)
|
||||
{
|
||||
LocaleGuard lg;
|
||||
XMLNode* node = new XMLNode("Session");
|
||||
XMLNode* child;
|
||||
|
||||
|
@ -1298,6 +1299,7 @@ Session::get_control_protocol_state ()
|
|||
int
|
||||
Session::set_state (const XMLNode& node, int version)
|
||||
{
|
||||
LocaleGuard lg;
|
||||
XMLNodeList nlist;
|
||||
XMLNode* child;
|
||||
XMLProperty const * prop;
|
||||
|
|
|
@ -373,6 +373,12 @@ Session::butler_transport_work ()
|
|||
}
|
||||
|
||||
if (ptw & PostTransportAdjustPlaybackBuffering) {
|
||||
/* non_realtime_locate() calls Automatable::transport_located()
|
||||
* for every route. This eventually calls
|
||||
* ARDOUR::AutomationList::state () which has a LocaleGuard,
|
||||
* and would switch locales forth/back every time.
|
||||
*/
|
||||
LocaleGuard lg;
|
||||
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
|
||||
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
|
||||
if (tr) {
|
||||
|
@ -421,7 +427,7 @@ Session::butler_transport_work ()
|
|||
/* don't seek if locate will take care of that in non_realtime_stop() */
|
||||
|
||||
if (!(ptw & PostTransportLocate)) {
|
||||
|
||||
LocaleGuard lg; // see note for non_realtime_locate() above
|
||||
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
|
||||
(*i)->non_realtime_locate (_transport_frame);
|
||||
|
||||
|
@ -530,9 +536,12 @@ Session::non_realtime_locate ()
|
|||
}
|
||||
|
||||
|
||||
boost::shared_ptr<RouteList> rl = routes.reader();
|
||||
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
|
||||
(*i)->non_realtime_locate (_transport_frame);
|
||||
{
|
||||
LocaleGuard lg; // see note for non_realtime_locate() above
|
||||
boost::shared_ptr<RouteList> rl = routes.reader();
|
||||
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
|
||||
(*i)->non_realtime_locate (_transport_frame);
|
||||
}
|
||||
}
|
||||
|
||||
_scene_changer->locate (_transport_frame);
|
||||
|
@ -789,15 +798,18 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
|
|||
|
||||
/* this for() block can be put inside the previous if() and has the effect of ... ??? what */
|
||||
|
||||
DEBUG_TRACE (DEBUG::Transport, X_("Butler PTW: locate\n"));
|
||||
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
|
||||
DEBUG_TRACE (DEBUG::Transport, string_compose ("Butler PTW: locate on %1\n", (*i)->name()));
|
||||
(*i)->non_realtime_locate (_transport_frame);
|
||||
{
|
||||
LocaleGuard lg; // see note for non_realtime_locate() above
|
||||
DEBUG_TRACE (DEBUG::Transport, X_("Butler PTW: locate\n"));
|
||||
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
|
||||
DEBUG_TRACE (DEBUG::Transport, string_compose ("Butler PTW: locate on %1\n", (*i)->name()));
|
||||
(*i)->non_realtime_locate (_transport_frame);
|
||||
|
||||
if (on_entry != g_atomic_int_get (&_butler->should_do_transport_work)) {
|
||||
finished = false;
|
||||
/* we will be back */
|
||||
return;
|
||||
if (on_entry != g_atomic_int_get (&_butler->should_do_transport_work)) {
|
||||
finished = false;
|
||||
/* we will be back */
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue