From e7638a3cf55771f21993bcc7d254f22ea35b8454 Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Mon, 28 Jan 2008 22:02:09 +0000 Subject: [PATCH] Fixed missing unlock when entity found, but role wasn't. --- saml/saml2/metadata/impl/ChainingMetadataProvider.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp b/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp index 0fb651f..d0810d8 100644 --- a/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp +++ b/saml/saml2/metadata/impl/ChainingMetadataProvider.cpp @@ -182,9 +182,7 @@ pair ChainingMetadataProvider::ge pair ret = pair(NULL,NULL); pair cur = ret; for (vector::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) { @@ -192,9 +190,11 @@ pair ChainingMetadataProvider::ge 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; } @@ -242,6 +242,10 @@ pair ChainingMetadataProvider::ge 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; @@ -270,9 +274,7 @@ pair ChainingMetadataProvider::ge } 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); } } -- 2.1.4