aboutsummaryrefslogtreecommitdiff
path: root/monitor
diff options
context:
space:
mode:
authorFabiano Rosas <farosas@suse.de>2024-06-17 15:57:21 -0300
committerFabiano Rosas <farosas@suse.de>2024-06-20 10:42:24 -0300
commita93ad56053e54a94875faabb042d7c60fdd2fe20 (patch)
tree109eccfc634ae880529e42cfb6f5a63a34a0d258 /monitor
parent1cd93fb0bf8b1fddab4c38e17145cc8776eadaa0 (diff)
downloadqemu-a93ad56053e54a94875faabb042d7c60fdd2fe20.zip
qemu-a93ad56053e54a94875faabb042d7c60fdd2fe20.tar.gz
qemu-a93ad56053e54a94875faabb042d7c60fdd2fe20.tar.bz2
monitor: Introduce monitor_fdset_*free
Introduce new functions to remove and free no longer used fds and fdsets. We need those to decouple the remove/free routines from monitor_fdset_cleanup() which will go away in the next patches. The new functions: - monitor_fdset_free/_if_empty() will be used when a monitor connection closes and when an fd is removed to cleanup any fdset that is now empty. - monitor_fdset_fd_free() will be used to remove one or more fds that have been explicitly targeted by qmp_remove_fd(). Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Fabiano Rosas <farosas@suse.de>
Diffstat (limited to 'monitor')
-rw-r--r--monitor/fds.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/monitor/fds.c b/monitor/fds.c
index fb9f58c..bd45a26 100644
--- a/monitor/fds.c
+++ b/monitor/fds.c
@@ -167,6 +167,27 @@ int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp)
return -1;
}
+static void monitor_fdset_free(MonFdset *mon_fdset)
+{
+ QLIST_REMOVE(mon_fdset, next);
+ g_free(mon_fdset);
+}
+
+static void monitor_fdset_free_if_empty(MonFdset *mon_fdset)
+{
+ if (QLIST_EMPTY(&mon_fdset->fds) && QLIST_EMPTY(&mon_fdset->dup_fds)) {
+ monitor_fdset_free(mon_fdset);
+ }
+}
+
+static void monitor_fdset_fd_free(MonFdsetFd *mon_fdset_fd)
+{
+ close(mon_fdset_fd->fd);
+ g_free(mon_fdset_fd->opaque);
+ QLIST_REMOVE(mon_fdset_fd, next);
+ g_free(mon_fdset_fd);
+}
+
static void monitor_fdset_cleanup(MonFdset *mon_fdset)
{
MonFdsetFd *mon_fdset_fd;
@@ -176,17 +197,11 @@ static void monitor_fdset_cleanup(MonFdset *mon_fdset)
if ((mon_fdset_fd->removed ||
(QLIST_EMPTY(&mon_fdset->dup_fds) && mon_refcount == 0)) &&
runstate_is_running()) {
- close(mon_fdset_fd->fd);
- g_free(mon_fdset_fd->opaque);
- QLIST_REMOVE(mon_fdset_fd, next);
- g_free(mon_fdset_fd);
+ monitor_fdset_fd_free(mon_fdset_fd);
}
}
- if (QLIST_EMPTY(&mon_fdset->fds) && QLIST_EMPTY(&mon_fdset->dup_fds)) {
- QLIST_REMOVE(mon_fdset, next);
- g_free(mon_fdset);
- }
+ monitor_fdset_free_if_empty(mon_fdset);
}
void monitor_fdsets_cleanup(void)