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/ -- 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