finisher_lock.Lock();
ldout(cct, 10) << "finisher_thread start" << dendl;
- utime_t start, end;
+ utime_t start;
+ uint64_t count;
while (!finisher_stop) {
/// Every time we are woken up, we process the queue until it is empty.
while (!finisher_queue.empty()) {
finisher_lock.Unlock();
ldout(cct, 10) << "finisher_thread doing " << ls << dendl;
- if (logger)
+ if (logger) {
start = ceph_clock_now();
+ count = ls.size();
+ }
// Now actually process the contexts.
for (vector<Context*>::iterator p = ls.begin();
c->complete(ls_rval.front().second);
ls_rval.pop_front();
}
- if (logger) {
- logger->dec(l_finisher_queue_len);
- end = ceph_clock_now();
- logger->tinc(l_finisher_complete_lat, end - start);
- start = end;
- }
}
ldout(cct, 10) << "finisher_thread done with " << ls << dendl;
ls.clear();
+ if (logger) {
+ logger->dec(l_finisher_queue_len, count);
+ logger->tinc(l_finisher_complete_lat, ceph_clock_now() - start);
+ }
finisher_lock.Lock();
finisher_running = false;