]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/MemStore: fix wrlock ordering checks
authorSage Weil <sage@redhat.com>
Sat, 19 Jul 2014 20:24:21 +0000 (13:24 -0700)
committerSage Weil <sage@redhat.com>
Sat, 19 Jul 2014 20:56:07 +0000 (13:56 -0700)
We can't compare the shared_ptrs themselves; we need to compare the
addresses of the actual objects.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/MemStore.cc

index c1af61733353733123fb71d15ea46d6bc7f82ab6..0491b5abe692979aacd27e4353d4c1c8aa2ff09a 100644 (file)
@@ -1351,8 +1351,8 @@ int MemStore::_collection_add(coll_t cid, coll_t ocid, const ghobject_t& oid)
   CollectionRef oc = get_collection(ocid);
   if (!oc)
     return -ENOENT;
-  RWLock::WLocker l1(MIN(c, oc)->lock);
-  RWLock::WLocker l2(MAX(c, oc)->lock);
+  RWLock::WLocker l1(MIN(&(*c), &(*oc))->lock);
+  RWLock::WLocker l2(MAX(&(*c), &(*oc))->lock);
 
   if (c->object_hash.count(oid))
     return -EEXIST;
@@ -1475,8 +1475,8 @@ int MemStore::_split_collection(coll_t cid, uint32_t bits, uint32_t match,
   CollectionRef dc = get_collection(dest);
   if (!dc)
     return -ENOENT;
-  RWLock::WLocker l1(MIN(sc, dc)->lock);
-  RWLock::WLocker l2(MAX(sc, dc)->lock);
+  RWLock::WLocker l1(MIN(&(*sc), &(*dc))->lock);
+  RWLock::WLocker l2(MAX(&(*sc), &(*dc))->lock);
 
   map<ghobject_t,ObjectRef>::iterator p = sc->object_map.begin();
   while (p != sc->object_map.end()) {