[lxc-devel] [PATCH 2/2] Support stopping containers concurrently
Serge Hallyn
serge.hallyn at ubuntu.com
Wed Apr 17 22:06:19 UTC 2013
Quoting S.Çağlar Onur (caglar at 10ur.org):
> From: "S.Çağlar Onur" <caglar at 10ur.org>
>
> Trying to stop multiple containers concurrently ends up with "cgroup is not mounted" errors as multiple threads corrupts the shared variables.
> Fix that stack corruption and start to use getmntent_r to support stopping multiple containers concurrently.
>
> Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
> ---
> src/lxc/cgroup.c | 152 +++++++++++++++++++++++++++++++++++------------------
> src/lxc/freezer.c | 18 +++++--
> src/lxc/state.c | 15 ++++--
> 3 files changed, 126 insertions(+), 59 deletions(-)
>
> diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c
> index 368214f..0739477 100644
> --- a/src/lxc/cgroup.c
> +++ b/src/lxc/cgroup.c
> @@ -54,6 +54,11 @@ lxc_log_define(lxc_cgroup, lxc);
>
> #define MTAB "/proc/mounts"
>
> +/* In the case of a bind mount, there could be two long pathnames in the
> + * mntent plus options so use large enough buffer size
> + */
> +#define LARGE_MAXPATHLEN 4 * MAXPATHLEN
> +
> /* Check if a mount is a cgroup hierarchy for any subsystem.
> * Return the first subsystem found (or NULL if none).
> */
> @@ -100,29 +105,31 @@ static char *mount_has_subsystem(const struct mntent *mntent)
> */
> static int get_cgroup_mount(const char *subsystem, char *mnt)
> {
> - struct mntent *mntent;
> + struct mntent *mntent, mntent_r;
> FILE *file = NULL;
> int ret, err = -1;
>
> + char buf[LARGE_MAXPATHLEN] = {0};
Ah yes, this must be what I thought we were waiting on - a response
from Stéphane on this.
I'm still worried about this stack usage, especially in something
which is rather commonly called. Stéphane, is this a non-issue
for arm?
-serge
More information about the lxc-devel
mailing list