bhyve does not clean up its IPC sockets after exiting.
It's not an issue because the existing socket does not
prevent it from starting again, but it is still better
to remove them on exit.

Signed-off-by: Roman Bogorodskiy <[email protected]>
---
 src/bhyve/bhyve_command.c |  5 ++---
 src/bhyve/bhyve_conf.c    |  3 +++
 src/bhyve/bhyve_process.c | 15 +++++++++++++++
 src/bhyve/bhyve_utils.h   |  1 +
 4 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
index 6b7431ddaf..69fe04c577 100644
--- a/src/bhyve/bhyve_command.c
+++ b/src/bhyve/bhyve_command.c
@@ -1104,7 +1104,7 @@ virBhyveProcessBuildBhyveCmd(struct _bhyveConn *driver, 
virDomainDef *def,
     if (!driver->privileged) {
         virCommandAddArg(cmd, "-M");
         virCommandAddArg(cmd, "-o");
-        virCommandAddArgFormat(cmd, "rundir=%s", driver->config->stateDir);
+        virCommandAddArgFormat(cmd, "rundir=%s", driver->config->bhyveRunDir);
     }
 
     /* CPUs */
@@ -1366,8 +1366,7 @@ virBhyveProcessBuildGetVMPidCmd(struct _bhyveConn *driver,
 
     virCommandAddArg(cmd, "--get-vm-pid");
     virCommandAddArgPair(cmd, "--vm", def->name);
-    if (!driver->privileged)
-        virCommandAddArgPair(cmd, "--rundir", driver->config->stateDir);
+    virCommandAddArgPair(cmd, "--rundir", driver->config->bhyveRunDir);
 
     return cmd;
 }
diff --git a/src/bhyve/bhyve_conf.c b/src/bhyve/bhyve_conf.c
index 182dd24a60..68bd22f00a 100644
--- a/src/bhyve/bhyve_conf.c
+++ b/src/bhyve/bhyve_conf.c
@@ -70,6 +70,7 @@ virBhyveDriverConfigNew(bool privileged)
         cfg->configDir = g_strdup_printf("%s/bhyve", cfg->configBaseDir);
         cfg->autostartDir = g_strdup_printf("%s/bhyve/autostart", 
cfg->configBaseDir);
         cfg->stateDir = g_strdup_printf("%s/libvirt/bhyve", RUNSTATEDIR);
+        cfg->bhyveRunDir = g_strdup(RUNSTATEDIR "/bhyve");
         cfg->logDir = g_strdup_printf("%s/log/libvirt/bhyve", LOCALSTATEDIR);
     } else {
         g_autofree char *rundir = NULL;
@@ -89,6 +90,7 @@ virBhyveDriverConfigNew(bool privileged)
         cfg->configDir = g_strdup_printf("%s/bhyve", cfg->configBaseDir);
         cfg->autostartDir = g_strdup_printf("%s/bhyve/autostart", 
cfg->configBaseDir);
         cfg->stateDir = g_strdup_printf("%s/bhyve/run", rundir);
+        cfg->bhyveRunDir = g_strdup(cfg->stateDir);
         cfg->logDir = g_strdup_printf("%s/bhyve/log", cachedir);
     }
 
@@ -151,6 +153,7 @@ virBhyveDriverConfigDispose(void *obj)
     g_free(cfg->logDir);
     g_free(cfg->nvramDir);
     g_free(cfg->stateDir);
+    g_free(cfg->bhyveRunDir);
 
     g_free(cfg->ubootPath);
 }
diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c
index 811ed4204d..b0cd03c389 100644
--- a/src/bhyve/bhyve_process.c
+++ b/src/bhyve/bhyve_process.c
@@ -718,6 +718,20 @@ bhyveProcessRemoveDomainStatus(const char *statusDir,
     }
 }
 
+static void
+bhyveProcessRemoveIPCSocket(struct _bhyveConn *driver,
+                            const char *name)
+{
+    g_autofree char *path = g_strdup_printf("%s/%s",
+                                            driver->config->bhyveRunDir,
+                                            name);
+
+    if (unlink(path) < 0 && errno != ENOENT) {
+        VIR_WARN("Failed to remove bhyve IPC socket for %s: %s",
+                 name, g_strerror(errno));
+    }
+}
+
 /**
  * @driver: bhyve driver
  * @vm: domain object
@@ -818,6 +832,7 @@ virBhyveProcessStopImpl(struct _bhyveConn *driver,
         bhyveProcessStopHook(driver, vm, VIR_HOOK_BHYVE_OP_RELEASE);
     virPidFileDelete(driver->config->stateDir, vm->def->name);
     bhyveProcessRemoveDomainStatus(driver->config->stateDir, vm->def->name);
+    bhyveProcessRemoveIPCSocket(driver, vm->def->name);
 
     if (restoreDef)
         virDomainObjRemoveTransientDef(vm);
diff --git a/src/bhyve/bhyve_utils.h b/src/bhyve/bhyve_utils.h
index 8a6ca25b47..db2789fe02 100644
--- a/src/bhyve/bhyve_utils.h
+++ b/src/bhyve/bhyve_utils.h
@@ -41,6 +41,7 @@ struct _virBhyveDriverConfig {
     char *logDir;
     char *nvramDir;
     char *stateDir;
+    char *bhyveRunDir;
 
     char *ubootPath;
 
-- 
2.55.0

Reply via email to