On Thu, Jul 15, 2010 at 12:45:54AM +0200, ольга крыжановская wrote: > The posix_spawn implementation in libc uses vfork. How is the POSIX > requirement that posix_spawn must be safe in multi threaded > application met if it relies on vfork which is *not* reliable in multi > threaded applications?
vfork()/vforkx() can be used in thread-unsafe ways. Therefore they marked as MT-Unsafe. They can also be used in thread-safe ways. posix_spawn(3C) does use vforkx() in a thread-safe way. How? By not doing anything to interfere with the state of the parent[*] while the child is still executing in the borrowed address space. [*] Well, posix_spawn() does make use of stack space on the thread in which it was called, but unless there's code in the parent that makes use of uninitialized local variables, the parent won't be affected by this. And the function call frame of posix_spawn() may be modified, but not in any way that will cause any errors in the parent. _______________________________________________ on-discuss mailing list on-discuss@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/on-discuss