[lxc-devel] [PATCH 2/3] lxc-start: store PID file to lxc_container

Qiang Huang h.huangqiang at huawei.com
Wed Jan 22 04:11:37 UTC 2014


So we can remove PID file untill lxc_container_free.

This also fix bug: https://github.com/lxc/lxc/issues/89

Signed-off-by: Qiang Huang <h.huangqiang at huawei.com>
---
 src/lxc/lxc_start.c    | 9 +++++----
 src/lxc/lxccontainer.c | 7 +++++++
 src/lxc/lxccontainer.h | 6 ++++++
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/lxc/lxc_start.c b/src/lxc/lxc_start.c
index d5379da..fd2dc6e 100644
--- a/src/lxc/lxc_start.c
+++ b/src/lxc/lxc_start.c
@@ -302,6 +302,11 @@ int main(int argc, char *argv[])
 	}
 
 	if (my_args.pidfile != NULL) {
+		if (ensure_path(&c->pidfile, my_args.pidfile) < 0) {
+			ERROR("failed to ensure pidfile '%s'", my_args.pidfile);
+			goto out;
+		}
+
 		pid_fp = fopen(my_args.pidfile, "w");
 		if (pid_fp == NULL) {
 			SYSERROR("failed to create pidfile '%s' for '%s'",
@@ -342,10 +347,6 @@ int main(int argc, char *argv[])
 		c->want_close_all_fds(c, true);
 
 	err = c->start(c, 0, args) ? 0 : -1;
-
-	if (my_args.pidfile)
-		unlink(my_args.pidfile);
-
 out:
 	lxc_container_put(c);
 	if (pid_fp)
diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index d020918..579c50c 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -237,6 +237,12 @@ static void lxc_container_free(struct lxc_container *c)
 		free(c->config_path);
 		c->config_path = NULL;
 	}
+	if (c->pidfile) {
+		unlink(c->pidfile);
+		free(c->pidfile);
+		c->pidfile = NULL;
+	}
+
 	free(c);
 }
 
@@ -3121,6 +3127,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath
 		lxcapi_clear_config(c);
 	}
 	c->daemonize = true;
+	c->pidfile = NULL;
 
 	// assign the member functions
 	c->is_defined = lxcapi_is_defined;
diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h
index f3c7d72..84caa31 100644
--- a/src/lxc/lxccontainer.h
+++ b/src/lxc/lxccontainer.h
@@ -68,6 +68,12 @@ struct lxc_container {
 
 	/*!
 	 * \private
+	 * File to store pid.
+	 */
+	char *pidfile;
+
+	/*!
+	 * \private
 	 * Container semaphore lock.
 	 */
 	struct lxc_lock *slock;
-- 
1.8.3




More information about the lxc-devel mailing list