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)