This patch adds a check that validates that the container process pid still
exists. This should catch cases where the container exits while libvirtd is
down.
--
Best Regards,
Dave Leskovec
IBM Linux Technology Center
Open Virtualization
---
src/lxc_conf.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
src/lxc_conf.h | 1 +
2 files changed, 47 insertions(+)
Index: b/src/lxc_conf.h
===================================================================
--- a/src/lxc_conf.h 2008-05-29 14:34:26.000000000 -0700
+++ b/src/lxc_conf.h 2008-05-29 14:47:55.000000000 -0700
@@ -124,6 +124,7 @@
const unsigned char *uuid);
lxc_vm_t *lxcFindVMByName(const lxc_driver_t *driver,
const char *name);
+int lxcCheckContainerProcess(lxc_vm_def_t *vm);
void lxcRemoveInactiveVM(lxc_driver_t *driver,
lxc_vm_t *vm);
void lxcFreeVMs(lxc_vm_t *vms);
Index: b/src/lxc_conf.c
===================================================================
--- a/src/lxc_conf.c 2008-05-29 14:34:26.000000000 -0700
+++ b/src/lxc_conf.c 2008-05-29 14:48:52.000000000 -0700
@@ -348,6 +348,12 @@
_("invalid domain id"));
goto error;
}
+
+ /* verify the container process still exists */
+ if (1 != lxcCheckContainerProcess(containerDef)) {
+ containerDef->id = -1;
+ }
+
} else {
containerDef->id = -1;
}
@@ -458,6 +464,46 @@
return vm;
}
+/**
+ * lxcCheckContainerProcess:
+ * @def: Ptr to VM definition
+ *
+ * Checks if the container process (stored at def->id is running
+ *
+ * Returns on success or -1 in case of error
+ * 0 - no process with id vm->def->id
+ * 1 - container process exists
+ * -1 - error
+ */
+int lxcCheckContainerProcess(lxc_vm_def_t *def)
+{
+ int rc = -1;
+
+ if (1 < def->id) {
+ if (-1 == kill(def->id, 0)) {
+ if (ESRCH == errno) {
+ rc = 0;
+ DEBUG("pid %d no longer exists", def->id);
+ goto done;
+ }
+
+ lxcError(NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ _("error checking container process: %d %s"),
+ def->id, strerror(errno));
+ goto done;
+ }
+
+ DEBUG("pid %d still exists", def->id);
+ rc = 1;
+ goto done;
+ }
+
+ rc = 0;
+
+done:
+ return rc;
+}
+
void lxcRemoveInactiveVM(lxc_driver_t *driver,
lxc_vm_t *vm)
{
--
Libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list