]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
another minor SafeTimer issue
authorsageweil <sageweil@29311d96-e01e-0410-9327-a35deaab8ce9>
Tue, 30 Jan 2007 20:52:04 +0000 (20:52 +0000)
committersageweil <sageweil@29311d96-e01e-0410-9327-a35deaab8ce9>
Tue, 30 Jan 2007 20:52:04 +0000 (20:52 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1054 29311d96-e01e-0410-9327-a35deaab8ce9

branches/sage/cephmds2/common/Timer.cc

index 7dc1f75e34d3200e75712d23c9b2d2e05a29a7ff..13180ef066b57f870158ab24b234105db0dad0b3 100644 (file)
@@ -219,7 +219,7 @@ bool Timer::cancel_event(Context *callback)
   dout(DBL) << "cancel_event " << callback << endl;
 
   if (!event_times.count(callback)) {
-    dout(DBL) << "cancel_event " << callback << " isn't scheduled (probably executing in another thread?)" << endl;
+    dout(DBL) << "cancel_event " << callback << " isn't scheduled (probably executing)" << endl;
     lock.Unlock();
     return false;     // wasn't scheduled.
   }
@@ -265,13 +265,14 @@ void SafeTimer::EventWrapper::finish(int r)
     // still scheduled.  execute.
     actual->finish(r);
     timer->scheduled.erase(actual);
+    timer->canceled.erase(actual);  // in case, say, i canceled myself
   } else {
     // canceled.
     assert(timer->canceled.count(actual));
     timer->canceled.erase(actual);
-    delete actual;
     timer->cond.Signal();
   }
+  delete actual;
   timer->lock.Unlock();
 }
 
@@ -302,6 +303,7 @@ void SafeTimer::join()
   while (!canceled.empty()) {
     // wait
     dout(-10) << "SafeTimer.join waiting for " << canceled.size() << " to join" << endl;
+    dout(-10) << canceled << endl;
     cond.Wait(lock);
   }
 }