On 07/26/2015 10:27 PM, Nicholas Miell wrote: > Sounds good. That was quick! Thanks for checking, and thanks for the report, Nicholas! Cheers, Michael > On Sun, Jul 26, 2015 at 1:24 PM, Michael Kerrisk (man-pages) > <mtk.manpages@xxxxxxxxx> wrote: >> On 07/24/2015 05:51 PM, Nicholas Miell wrote: >>> PTHREAD_PROCESS_SHARED says any thread with access to the memory containing >>> the mutex can operate on the mutex and POSIX basically ignores the idea >>> that different processes could be running completely incompatible >>> executables or whatever. >>> >>> pthread_mutex_t has a bunch of #ifdefs in the middle of it that change the >>> structure size and layout between i386 and x86_64. >>> >>> Most importantly, the positions of the __nusers and __kind fields are >>> swapped (this looks to be an oversight dating back to 2003 when __nusers >>> was first introduced and carefully preserved when the separate i386 and >>> x86_64 versions of pthreadtypes.h were merged into the single x86 version), >>> which means that when the lock and unlock functions attempt to figure out >>> what kind of mutex it is (recursive/adaptive/whatever), they'll look at the >>> wrong field if the mutex is from the wrong architecture and then things >>> will break. >>> >>> And then there's the fact that the rest of the struct is a union in the >>> 32-bit version and flat in the 64-bit version, but that could have been >>> worked around if you put a flag in the __kind field that tells the 64-bit >>> pthread library that it is looking at a 32-bit mutex. >> >> Thanks for the additional detail, Nicholas. So, how about a paragraph such >> as the following for the manual page: >> >> POSIX says that any thread in any process with access to the mem‐ >> ory containing a process-shared (PTHREAD_PROCESS_SHARED) mutex >> can operate on that mutex. However, on 64-bit x86 systems, the >> mutex definition for x86-64 is incompatible with the mutex defi‐ >> nition for i386, meaning that 32-bit and 64-bit binaries can't >> share mutexes on x86-64 systems. >> ? >> >> Cheers, >> >> Michael >> >> >>> On Fri, Jul 24, 2015 at 12:57 AM, Michael Kerrisk (man-pages) < >>> mtk.manpages@xxxxxxxxx> wrote: >>> >>>> On 03/22/2015 10:38 PM, Nicholas Miell wrote: >>>>> On 03/22/2015 07:38 AM, Michael Kerrisk (man-pages) wrote: >>>>>> Hello all, >>>>>> >>>>>> I wrote a short man page documented some of the details of >>>>>> NPTL that might affect application developers. Review comments >>>>>> would be most welcome. >>>>>> >>>>>> Thanks, >>>>>> >>>>>> Michael >>>>> >>>>> POSIX specifies that process-shared pthread_mutex_t's can be manipulated >>>>> by independent processes, however the AMD64 and i386 versions of the >>>>> mutex structures are incompatible and cannot be shared. >>>>> >>>>> This might be true of the other supposedly sharable primitives, I never >>>>> bothered to check the rest when I first noticed the problem with mutexes. >>>> >>>> Nicholas, >>>> >>>> Can you provide pointers to further information on this topic? >>>> >>>> Cheers, >>>> >>>> Michael >>>> >>>> >>>> -- >>>> Michael Kerrisk >>>> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ >>>> Linux/UNIX System Programming Training: http://man7.org/training/ >>>> >>> >> >> >> -- >> Michael Kerrisk >> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ >> Linux/UNIX System Programming Training: http://man7.org/training/ > -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/ -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html