From b5ce4d0ed75f2fcc7f91a4e6a9ad43bc59700b3f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 9 Nov 2012 10:12:21 -0800 Subject: [PATCH] client: fix SnapRealm leak Start ref count at 0; get_snap_realm() will increment it after alloc. Fix the ref drop order so that the xlist is empty. Signed-off-by: Sage Weil --- src/client/Client.cc | 2 +- src/client/SnapRealm.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 742ffa42a68a4..ffc67ed19314a 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -2607,9 +2607,9 @@ void Client::remove_cap(Cap *cap) if (!in->is_any_caps()) { ldout(cct, 15) << "remove_cap last one, closing snaprealm " << in->snaprealm << dendl; + in->snaprealm_item.remove_myself(); put_snap_realm(in->snaprealm); in->snaprealm = 0; - in->snaprealm_item.remove_myself(); } } diff --git a/src/client/SnapRealm.h b/src/client/SnapRealm.h index b99fd6e86dd3a..839c68aef696a 100644 --- a/src/client/SnapRealm.h +++ b/src/client/SnapRealm.h @@ -25,7 +25,7 @@ public: xlist inodes_with_caps; SnapRealm(inodeno_t i) : - ino(i), nref(1), created(0), seq(0), + ino(i), nref(0), created(0), seq(0), pparent(NULL) { } void build_snap_context(); -- 2.39.5