[lxc-devel] [lxc/lxc] 6c6892: fix multithreaded create()

GitHub noreply at github.com
Tue Nov 12 20:44:11 UTC 2013


  Branch: refs/heads/master
  Home:   https://github.com/lxc/lxc
  Commit: 6c6892b5c5c6281d1e74c979168d1cbbe6a50ffc
      https://github.com/lxc/lxc/commit/6c6892b5c5c6281d1e74c979168d1cbbe6a50ffc
  Author: Dwight Engen <dwight.engen at oracle.com>
  Date:   2013-11-12 (Tue, 12 Nov 2013)

  Changed paths:
    M src/lxc/lxccontainer.c

  Log Message:
  -----------
  fix multithreaded create()

We were calling save_config() twice within the create() flow, each
from a different process. Depending on order of scheduling, sometimes
the data from the first save_config() (which was just the stuff from
LXC_DEFAULT_CONFIG) would overwrite the config we wanted (the full
config), causing a truncated config file which would then cause lxc
to segfault once it read it back in because no rootfs.path was set.

This fixes it by only calling save_config() once in the create()
flow. A rejected alternative was to call fsync(fileno(fout)) before
the fclose in save_config.

Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
Acked-by: S.Çağlar Onur <caglar at 10ur.org>
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>


  Commit: 68c9cf36681cf0cdec6725b513107f9b65273498
      https://github.com/lxc/lxc/commit/68c9cf36681cf0cdec6725b513107f9b65273498
  Author: Dwight Engen <dwight.engen at oracle.com>
  Date:   2013-11-12 (Tue, 12 Nov 2013)

  Changed paths:
    M src/lxc/lxccontainer.c

  Log Message:
  -----------
  add process_lock()/unlock() in save_config()

This is likely unnecessary, but is consistent with other uses of
fopen()/fclose() in lxc.

Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
Acked-by: S.Çağlar Onur <caglar at 10ur.org>
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>


Compare: https://github.com/lxc/lxc/compare/bdb3f44147bc...68c9cf36681c


More information about the lxc-devel mailing list