-
Remove process_lock() except where actually needed · dd1d77f9Andrey Mazo authored
Functions like open(), close(), socket(), socketpair(), pipe() and mkdir() are generally thin wrappers around kernel-provided system calls. It's the kernel not libc, who ensures race-free handling of file descriptors. Thus locking around these functions is unnecessary even on somewhat buggy libcs. fopen(), fclose() and other stdio functions may maintain internal lists of open file handles and thus can be prone to race-conditions. Hopefully, most libcs utilize proper locking or other ways to ensure thread-safety of these functions. Bionic used to have non-thread-safe stdio [2] but that must be fixed since android 4.3 [3, 4]. S.Çağlar Onur showed [1] that openpty() (because of nsswitch) is not thread-safe though. So we workaround it by protecting openpty() calls with process_lock()/process_unlock(). Because of the need to guard openpty() with process_lock()/process_unlock(), process_unlock() is still used after fork(). This commit reverts most of 025ed0f3. [1] https://github.com/lxc/lxc/pull/106#issuecomment-31077269 [2] https://bugzilla.mozilla.org/show_bug.cgi?id=687367 [3] https://android.googlesource.com/platform/bionic/+/f582340a6a48588aa50da17e1620e8f91b146941 [4] https://android.googlesource.com/platform/bionic/+/6b3f49a5374305ce9690c3c5ca2aadc90f54c521Signed-off-by:
Andrey Mazo <mazo@telum.ru> Signed-off-by:
Serge Hallyn <serge.hallyn@ubuntu.com>
dd1d77f9
×