pair<const EntityDescriptor*,const RoleDescriptor*> ret = pair<const EntityDescriptor*,const RoleDescriptor*>(NULL,NULL);
pair<const EntityDescriptor*,const RoleDescriptor*> cur = ret;
for (vector<MetadataProvider*>::const_iterator i=m_providers.begin(); i!=m_providers.end(); ++i) {
- m_log.debug("locking embedded metadata provider (%p)", *i);
(*i)->lock();
- m_log.debug("locked embedded metadata provider (%p)", *i);
cur = (*i)->getEntityDescriptor(criteria);
if (cur.first) {
if (bRole) {
if (cur.second) {
// Are we using a first match policy?
if (m_firstMatch) {
+ // We could have an entity-only match from earlier, so unlock it.
+ if (held)
+ held->unlock();
// Save locked provider.
m_tlsKey->setData(*i);
- m_log.debug("leaving embedded metadata provider locked (%p)", *i);
return cur;
}
else {
// Are we using a first match policy?
if (m_firstMatch) {
+ // I don't think this can happen, but who cares, check anyway.
+ if (held)
+ held->unlock();
+
// Save locked provider.
m_tlsKey->setData(*i);
return cur;
}
else {
// No match, so just unlock this one and move on.
- m_log.debug("unlocking embedded metadata provider (%p)", *i);
(*i)->unlock();
- m_log.debug("unlocked embedded metadata provider (%p)", *i);
}
}