On Mon, Sep 23, 2024 at 04:25:54PM -0500, Praveen K Paladugu wrote: > > > On 9/19/2024 8:02 AM, Purna Pavan Chandra Aekkaladevi wrote: > >The `--event-monitor` option in cloud-hypervisor outputs events to a > >specified file. This file can then be used to monitor VM lifecycle, > >other vmm events and trigger appropriate actions. > > > >Signed-off-by: Purna Pavan Chandra Aekkaladevi <paekkaladevi@xxxxxxxxxxxxxxxxxxx> > >Co-authored-by: Vineeth Pillai <viremana@xxxxxxxxxxxxxxxxxxx> > >--- > > src/ch/ch_monitor.c | 20 ++++++++++++++++---- > > src/ch/ch_monitor.h | 2 ++ > > 2 files changed, 18 insertions(+), 4 deletions(-) > > > >diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c > >index 3e49902791..8c99fe1019 100644 > >--- a/src/ch/ch_monitor.c > >+++ b/src/ch/ch_monitor.c > >@@ -540,7 +540,6 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cfg) > > { > > g_autoptr(virCHMonitor) mon = NULL; > > g_autoptr(virCommand) cmd = NULL; > >- const char *socketdir = cfg->stateDir; > > int socket_fd = 0; > > if (virCHMonitorInitialize() < 0) > >@@ -556,11 +555,13 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cfg) > > } > > /* prepare to launch Cloud-Hypervisor socket */ > >- mon->socketpath = g_strdup_printf("%s/%s-socket", socketdir, vm->def->name); > >- if (g_mkdir_with_parents(socketdir, 0777) < 0) { > >+ mon->socketpath = g_strdup_printf("%s/%s-socket", cfg->stateDir, vm->def->name); > >+ mon->eventmonitorpath = g_strdup_printf("%s/%s-event-monitor", > >+ cfg->stateDir, vm->def->name); > >+ if (g_mkdir_with_parents(cfg->stateDir, 0777) < 0) { > > virReportSystemError(errno, > > _("Cannot create socket directory '%1$s'"), > >- socketdir); > >+ cfg->stateDir); > > return NULL; > > } > >@@ -585,6 +586,9 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cfg) > > virCommandAddArgFormat(cmd, "fd=%d", socket_fd); > > virCommandPassFD(cmd, socket_fd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); > >+ virCommandAddArg(cmd, "--event-monitor"); > >+ virCommandAddArgFormat(cmd, "path=%s", mon->eventmonitorpath); > >+ > > /* launch Cloud-Hypervisor socket */ > > if (virCommandRunAsync(cmd, &mon->pid) < 0) > > return NULL; > >@@ -629,6 +633,14 @@ void virCHMonitorClose(virCHMonitor *mon) > > g_free(mon->socketpath); > > } > >+ if (mon->eventmonitorpath) { > >+ if (virFileRemove(mon->eventmonitorpath, -1, -1) < 0) { > >+ VIR_WARN("Unable to remove CH event monitor file '%s'", > >+ mon->eventmonitorpath); > >+ } > >+ g_free(mon->eventmonitorpath); > >+ } > >+ > > Do you really need to remove mon->eventmonitorpath here? > In patch3, you introduce `virCHStopEventHandler`, which causes the > thread to exit its while loop and run > `VIR_FORCE_CLOSE(event_monitor_fd)`, which also deletes the > event_monitor file. > `VIR_FORCE_CLOSE` just closes the fd. The file needs to be explicitly deleted. > > > > virObjectUnref(mon); > > } > >diff --git a/src/ch/ch_monitor.h b/src/ch/ch_monitor.h > >index b35f5ea027..2ef8706b99 100644 > >--- a/src/ch/ch_monitor.h > >+++ b/src/ch/ch_monitor.h > >@@ -95,6 +95,8 @@ struct _virCHMonitor { > > char *socketpath; > >+ char *eventmonitorpath; > >+ > > pid_t pid; > > virDomainObj *vm; > Regards, Purna Pavan Chandra