|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 25/31] libxl_qmp_ev: Disconnect QMP when no more events
This will check if there is more libxl_ev_qmp in flight, and if not,
just disconnect from the QMP socket.
Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
tools/libxl/libxl_qmp.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
index adf466e4c4..302178c5f5 100644
--- a/tools/libxl/libxl_qmp.c
+++ b/tools/libxl/libxl_qmp.c
@@ -1800,6 +1800,7 @@ static void ev_qmp_callback_error(libxl__egc *egc,
libxl__ev_qmp_state *qmp)
libxl__ev_qmp_stop(gc, qmp);
}
+static void libxl__ev_qmp_checkstate(libxl__gc *gc, libxl__ev_qmp_state *qmp);
static void ev_qmp_fd_callback(libxl__egc *egc, libxl__ev_fd *ev_fd,
int fd, short events, short revents)
{
@@ -1836,6 +1837,8 @@ static void ev_qmp_fd_callback(libxl__egc *egc,
libxl__ev_fd *ev_fd,
libxl__ev_fd_modify(gc, &qmp->efd, events & ~POLLOUT);
}
}
+ /* Check if there is still something to do or just disconnect. */
+ libxl__ev_qmp_checkstate(gc, qmp);
}
static void libxl__ev_qmp_state_init(libxl__ev_qmp_state *qmp)
@@ -1922,6 +1925,16 @@ out:
return qmp;
}
+/* Check if it should stay around or just close the socket to let other use use
+ * it. */
+static void libxl__ev_qmp_checkstate(libxl__gc *gc, libxl__ev_qmp_state *qmp)
+{
+ if (LIBXL_TAILQ_EMPTY(&qmp->qmp_events)) {
+ LOGD(DEBUG, qmp->domid, "Nothing left to do, stop QMP ev handler");
+ libxl__ev_qmp_stop(gc, qmp);
+ }
+}
+
void libxl__ev_qmp_stop(libxl__gc *gc, libxl__ev_qmp_state *qmp)
{
libxl__qmp_rx_buf *buf, *tbuf;
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |