]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: use SaferCond in check_pool_perm
authorJohn Spray <john.spray@redhat.com>
Thu, 7 May 2015 17:17:37 +0000 (18:17 +0100)
committerJohn Spray <john.spray@redhat.com>
Thu, 7 May 2015 17:46:38 +0000 (18:46 +0100)
Just because it's easier to read.

Signed-off-by: John Spray <john.spray@redhat.com>
src/client/Client.cc

index de285676448290f052c8bcde6111c93e8f1336a5..814ed358652b51dd47b8b212f9e5e5858d368dc5 100644 (file)
@@ -10781,31 +10781,25 @@ int Client::check_pool_perm(Inode *in, int need)
     snprintf(oid_buf, sizeof(oid_buf), "%llx.00000000", (unsigned long long)in->ino);
     object_t oid = oid_buf;
 
-    Mutex lock("Client::check_pool_perm::lock");
-    Cond cond;
-    bool done[2] = {false, false};
-    int rd_ret;
-    int wr_ret;
-
+    C_SaferCond rd_cond;
     ObjectOperation rd_op;
     rd_op.stat(NULL, (utime_t*)NULL, NULL);
 
     objecter->mutate(oid, OSDMap::file_to_object_locator(in->layout), rd_op,
                     in->snaprealm->get_snap_context(), ceph_clock_now(cct), 0,
-                    new C_SafeCond(&lock, &cond, &done[0], &rd_ret), NULL);
+                    &rd_cond, NULL);
 
+    C_SaferCond wr_cond;
     ObjectOperation wr_op;
     wr_op.create(true);
 
     objecter->mutate(oid, OSDMap::file_to_object_locator(in->layout), wr_op,
                     in->snaprealm->get_snap_context(), ceph_clock_now(cct), 0,
-                    new C_SafeCond(&lock, &cond, &done[1], &wr_ret), NULL);
+                    &wr_cond, NULL);
 
     client_lock.Unlock();
-    lock.Lock();
-    while (!done[0] || !done[1])
-      cond.Wait(lock);
-    lock.Unlock();
+    int rd_ret = rd_cond.wait();
+    int wr_ret = wr_cond.wait();
     client_lock.Lock();
 
     if (rd_ret == 0 || rd_ret == -ENOENT)