From afc69b119e17f016995efe37101f6a30bedcf10d Mon Sep 17 00:00:00 2001 From: sageweil Date: Wed, 10 Oct 2007 18:12:38 +0000 Subject: [PATCH] fixed memory leak in path_traverse git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1911 29311d96-e01e-0410-9327-a35deaab8ce9 --- branches/sage/mds/mds/Locker.cc | 2 +- branches/sage/mds/mds/MDCache.cc | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/branches/sage/mds/mds/Locker.cc b/branches/sage/mds/mds/Locker.cc index 2ce9017dc7cab..0e6156cb80cc3 100644 --- a/branches/sage/mds/mds/Locker.cc +++ b/branches/sage/mds/mds/Locker.cc @@ -1109,7 +1109,7 @@ bool Locker::simple_rdlock_try(SimpleLock *lock, Context *con) // wait! dout(7) << "simple_rdlock_try waiting on " << *lock << " on " << *lock->get_parent() << dendl; - lock->add_waiter(SimpleLock::WAIT_RD, con); + if (con) lock->add_waiter(SimpleLock::WAIT_RD, con); return false; } diff --git a/branches/sage/mds/mds/MDCache.cc b/branches/sage/mds/mds/MDCache.cc index 4c4783470157b..9dbbbb0a01135 100644 --- a/branches/sage/mds/mds/MDCache.cc +++ b/branches/sage/mds/mds/MDCache.cc @@ -3754,10 +3754,13 @@ void MDCache::dispatch(Message *m) Context *MDCache::_get_waiter(MDRequest *mdr, Message *req) { - if (mdr) + if (mdr) { + dout(20) << "_get_waiter retryrequest" << dendl; return new C_MDS_RetryRequest(this, mdr); - else + } else { + dout(20) << "_get_waiter retrymessage" << dendl; return new C_MDS_RetryMessage(mds, req); + } } int MDCache::path_traverse(MDRequest *mdr, Message *req, // who @@ -3840,8 +3843,11 @@ int MDCache::path_traverse(MDRequest *mdr, Message *req, // who // must read directory hard data (permissions, x bit) to traverse if (!noperm && - !mds->locker->simple_rdlock_try(&cur->authlock, _get_waiter(mdr, req))) + !mds->locker->simple_rdlock_try(&cur->authlock, 0)) { + dout(7) << "traverse: waiting on authlock rdlock on " << *cur << dendl; + cur->authlock.add_waiter(SimpleLock::WAIT_RD, _get_waiter(mdr, req)); return 1; + } // check permissions? // XXX -- 2.39.5