complete_external_callback();
} else {
complete_cb(rbd_comp, complete_arg);
+ complete_event_socket();
}
- }
-
- if (ictx != nullptr && event_notify && ictx->event_socket.is_valid()) {
- ictx->event_socket_completions.push(this);
- ictx->event_socket.notify();
+ } else {
+ complete_event_socket();
}
state = AIO_STATE_COMPLETE;
AioCompletion* aio_comp;
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();
}
ictx->external_callback_in_progress.store(false);
}
}
+void AioCompletion::complete_event_socket() {
+ if (ictx != nullptr && event_notify && ictx->event_socket.is_valid()) {
+ ictx->event_socket_completions.push(this);
+ ictx->event_socket.notify();
+ }
+}
+
} // namespace io
} // namespace librbd