While talking about pain points there is a very large one.  In short
pthreads break fork().

At least according to the open group after fork (when more than one
pthread is active) and by extension clone(CLONE_NEW...) it is only safe
to call async-signal-safe functions.  The rationale being that some
other thread might have possibly held a lock during fork.

Which means it becomes extraordinarily difficult to safely set up
and read /proc/mounts etc, etc.  Because malloc and huge portions of
supporting code are now verbotten.

Several of the namespaces require a non-trivial amount of set-up work
from within.  The mount namespace requires calling mount, umount, and
pivot_root.  The network namespace requires making netlink calls over
sockets.

The work arounds involving multi-process synchronization and setns after
fork are quite ugly.

It would be nice if at least malloc and C++ new were safe (and
documented as safe) after fork in a pthread environment.  That would go
a long ways to allowing running interesting set up code without having
to jump through hoops.

Eric
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to