diff --git a/Control/SGTools/src/DataStore.cxx b/Control/SGTools/src/DataStore.cxx index 1201c297c34b6b9dff3c153a7149c026b95470e8..d7e596184fb368da9ba7d40bc25b212a6e792d9d 100755 --- a/Control/SGTools/src/DataStore.cxx +++ b/Control/SGTools/src/DataStore.cxx @@ -218,8 +218,9 @@ DataStore::removeProxy(DataProxy* proxy, bool forceRemove, bool hard) // Remove all symlinks too. for (CLID symclid : clids) { - if (symclid == clid) continue; - m_keyMap.erase (m_pool.stringToKey (name, symclid)); + sgkey_t sgkey = m_pool.stringToKey (name, symclid); + m_keyMap.erase (sgkey); + if (clid == symclid) continue; storeIter = m_storeMap.find(symclid); if (storeIter != m_storeMap.end()) { SG::ProxyIterator it = storeIter->second.find (name); diff --git a/Control/SGTools/test/DataStore_test.cxx b/Control/SGTools/test/DataStore_test.cxx index 16bca70d27df2500259a04aac5548b54536926c3..2c5b4ef122c6113bc836b8389b0812bc57deb38e 100644 --- a/Control/SGTools/test/DataStore_test.cxx +++ b/Control/SGTools/test/DataStore_test.cxx @@ -386,7 +386,24 @@ void test_removeProxy ATLAS_NOT_THREAD_SAFE () assert (store.proxy (123, "dp1") == 0); assert (store.proxy (124, "dp1") == 0); assert (store.proxy (123, "dp1x") == 0); + dp1->release(); + //============================================== + + // Test recording with a secondary CLID first. + SG::DataProxy* dp2 = make_proxy (223, "dp2"); + dp2->resetOnly (false); + dp2->addRef(); + dp2->setTransientID (223); + dp2->setTransientID (224); + assert (store.addToStore (224, dp2).isSuccess()); + assert (store.addToStore (223, dp2).isSuccess()); + assert (dp2->refCount() == 3); + assert (store.removeProxy (dp2, false, false).isSuccess()); + assert (dp2->refCount() == 1); + assert (store.proxy_exact (pool.stringToKey ("dp2", 223)) == 0); + assert (store.proxy_exact (pool.stringToKey ("dp2", 224)) == 0); + dp2->release(); }