]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: use C_SaferCond for _read_sync
authordongdong tao <tdd21151186@gmail.com>
Sun, 7 Jan 2018 13:59:59 +0000 (21:59 +0800)
committerdongdong tao <tdd21151186@gmail.com>
Sat, 13 Jan 2018 09:39:37 +0000 (17:39 +0800)
Signed-off-by: dongdong tao <tdd21151186@gmail.com>
src/client/Client.cc

index 664953c8b150f9c986fed6ea300c03b79f49693f..06f47d4d9482e1fd6a0b4cffc10295782b430f78 100644 (file)
@@ -8941,21 +8941,16 @@ int Client::_read_sync(Fh *f, uint64_t off, uint64_t len, bufferlist *bl,
   Mutex flock("Client::_read_sync flock");
   Cond cond;
   while (left > 0) {
-    int r = 0;
-    bool done = false;
-    Context *onfinish = new C_SafeCond(&flock, &cond, &done, &r);
+    C_SaferCond onfinish("Client::_read_sync flock");
     bufferlist tbl;
 
     int wanted = left;
     filer->read_trunc(in->ino, &in->layout, in->snapid,
                      pos, left, &tbl, 0,
                      in->truncate_size, in->truncate_seq,
-                     onfinish);
+                     &onfinish);
     client_lock.Unlock();
-    flock.Lock();
-    while (!done)
-      cond.Wait(flock);
-    flock.Unlock();
+    int r = onfinish.wait();
     client_lock.Lock();
 
     // if we get ENOENT from OSD, assume 0 bytes returned