take read-lock when saving processor order

This commit is contained in:
Robin Gareus 2016-05-26 15:05:06 +02:00
parent eadc2ca88a
commit 00967a1982

View file

@ -2781,26 +2781,29 @@ Route::state(bool full_state)
node->add_child_nocopy (_pannable->state (full_state)); node->add_child_nocopy (_pannable->state (full_state));
} }
for (i = _processors.begin(); i != _processors.end(); ++i) { {
if (!full_state) { Glib::Threads::RWLock::ReaderLock lm (_processor_lock);
/* template save: do not include internal sends functioning as for (i = _processors.begin(); i != _processors.end(); ++i) {
aux sends because the chance of the target ID if (!full_state) {
in the session where this template is used /* template save: do not include internal sends functioning as
is not very likely. aux sends because the chance of the target ID
in the session where this template is used
is not very likely.
similarly, do not save listen sends which connect to similarly, do not save listen sends which connect to
the monitor section, because these will always be the monitor section, because these will always be
added if necessary. added if necessary.
*/ */
boost::shared_ptr<InternalSend> is; boost::shared_ptr<InternalSend> is;
if ((is = boost::dynamic_pointer_cast<InternalSend> (*i)) != 0) { if ((is = boost::dynamic_pointer_cast<InternalSend> (*i)) != 0) {
if (is->role() == Delivery::Listen) { if (is->role() == Delivery::Listen) {
continue; continue;
}
} }
} }
node->add_child_nocopy((*i)->state (full_state));
} }
node->add_child_nocopy((*i)->state (full_state));
} }
if (_extra_xml) { if (_extra_xml) {