+ if (node.name() != xml_node_name) {
+ return -1;
+ }
+
+ XMLNodeList const & children = node.children();
+ VCAList vcal;
+
+ _vcas_loaded = false;
+
+ for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) {
+ if ((*i)->name() == VCA::xml_node_name) {
+ boost::shared_ptr<VCA> vca = boost::shared_ptr<VCA> (new VCA (_session, 0, X_("tobereset")));
+ BOOST_MARK_VCA (vca);
+
+ if (vca->init() || vca->set_state (**i, version)) {
+ error << _("Cannot set state of a VCA") << endmsg;
+ return -1;
+ }
+
+ /* can't hold the lock for the entire loop,
+ * because the new VCA maybe slaved and needs
+ * to call back into us to set up its own
+ * slave/master relationship
+ */
+
+ {
+ Mutex::Lock lm (lock);
+ _vcas.push_back (vca);
+ vcal.push_back (vca);
+ }
+ }
+ }
+
+ _vcas_loaded = true;
+
+ VCAAdded (vcal); /* EMIT SIGNAL */
+