} 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();
}
if (image_dispatcher_ctx != nullptr) {
boost::asio::dispatch(ictx->asio_engine->get_api_strand(), [this]() {
complete_cb(rbd_comp, complete_arg);
complete_event_socket();
+ notify_callbacks_complete();
put();
});
}
}
}
+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 {