[lxc-devel] [lxc/lxc] 025ed0: make heavier use of process_lock (v2)

GitHub noreply at github.com
Wed Sep 18 18:42:46 UTC 2013


  Branch: refs/heads/staging
  Home:   https://github.com/lxc/lxc
  Commit: 025ed0f3911836b71f498d8368725c77a7e1932a
      https://github.com/lxc/lxc/commit/025ed0f3911836b71f498d8368725c77a7e1932a
  Author: Serge Hallyn <serge.hallyn at ubuntu.com>
  Date:   2013-09-18 (Wed, 18 Sep 2013)

  Changed paths:
    M src/lxc/af_unix.c
    M src/lxc/apparmor.c
    M src/lxc/attach.c
    M src/lxc/bdev.c
    M src/lxc/caps.c
    M src/lxc/cgroup.c
    M src/lxc/commands.c
    M src/lxc/conf.c
    M src/lxc/console.c
    M src/lxc/freezer.c
    M src/lxc/log.c
    M src/lxc/lxccontainer.c
    M src/lxc/lxclock.c
    M src/lxc/lxclock.h
    M src/lxc/lxcutmp.c
    M src/lxc/mainloop.c
    M src/lxc/monitor.c
    M src/lxc/network.c
    M src/lxc/nl.c
    M src/lxc/parse.c
    M src/lxc/seccomp.c
    M src/lxc/start.c
    M src/lxc/state.c
    M src/lxc/sync.c
    M src/lxc/utils.c

  Log Message:
  -----------
  make heavier use of process_lock (v2)

pthread_mutex_lock() will only return an error if it was set to
PTHREAD_MUTEX_ERRORCHECK and we are recursively calling it (and
would otherwise have deadlocked).  If that's the case then log a
message for future debugging and exit.  Trying to "recover" is
nonsense at that point.

process_lock() was held over too long a time in lxcapi_start()
in the daemonize case.  (note the non-daemonized case still needs a
check to enforce that it must NOT be called while threaded).  Add
process_lock() at least across all open/close/socket() calls.

Anything done after a fork() doesn't need the locks as it is no
longer threaded - so some open/close/dups()s are not locked for
that reason.  However, some common functions are called from both
threaded and non-threaded contexts.  So after doing a fork(), do
a possibly-extraneous process_unlock() to make sure that, if we
were forked while pthread mutex was held, we aren't deadlocked by
nobody.

Tested that lp:~serge-hallyn/+junk/lxc-test still works with this
patch.

Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
Tested-by: S.Çağlar Onur <caglar at 10ur.org>
Acked-by: Stéphane Graber <stgraber at ubuntu.com>





More information about the lxc-devel mailing list