]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: resolve memory leak of recall gather
authorPatrick Donnelly <pdonnell@redhat.com>
Fri, 1 Feb 2019 04:43:42 +0000 (20:43 -0800)
committerVenky Shankar <vshankar@redhat.com>
Thu, 4 Apr 2019 07:12:17 +0000 (03:12 -0400)
Small change in behavior: after all clients respond to session flush, immediate
begin next recall instead of waiting a whole second.

Fixes: http://tracker.ceph.com/issues/38340
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit d8000a556a3390317fb4eca0621cf36ff2e5eb82)

src/mds/MDSRank.cc

index 89b6e97b0658006c74a46d3ab6f1eebfe150a7d5..9b35b66ba4b9491e7fe374d4a61ce0afd652ea51 100644 (file)
@@ -331,10 +331,13 @@ private:
 
     caps_recalled += count;
     if ((throttled || count > 0) && (recall_timeout == 0 || duration < recall_timeout)) {
-      auto timer = new FunctionContext([this](int _) {
-        recall_client_state();
-      });
-      mds->timer.add_event_after(1.0, timer);
+      C_ContextTimeout *ctx = new C_ContextTimeout(
+        mds, 1, new FunctionContext([this](int r) {
+          recall_client_state();
+      }));
+      ctx->start_timer();
+      gather->set_finisher(new MDSInternalContextWrapper(mds, ctx));
+      gather->activate();
     } else {
       if (!gather->has_subs()) {
         delete gather;