} else {
complete_cb(rbd_comp, complete_arg);
complete_event_socket();
+ notify_callbacks_complete();
}
} else {
complete_event_socket();
- }
- state = AIO_STATE_COMPLETE;
-
- {
- std::unique_lock<std::mutex> locker(lock);
- cond.notify_all();
+ notify_callbacks_complete();
}
// note: possible for image to be closed after op marked finished
while (ictx->external_callback_completions.pop(aio_comp)) {
aio_comp->complete_cb(aio_comp->rbd_comp, aio_comp->complete_arg);
aio_comp->complete_event_socket();
+ aio_comp->notify_callbacks_complete();
}
ictx->external_callback_in_progress.store(false);
}
}
+void AioCompletion::notify_callbacks_complete() {
+ state = AIO_STATE_COMPLETE;
+
+ std::unique_lock<std::mutex> locker(lock);
+ cond.notify_all();
+}
+
} // namespace io
} // namespace librbd
void queue_complete();
void complete_external_callback();
void complete_event_socket();
-
+ void notify_callbacks_complete();
};
class C_AioRequest : public Context {