On Fri, Feb 29, 2008 at 9:36 AM, Nicholas Nethercote <[EMAIL PROTECTED]> wrote: > On Thu, 28 Feb 2008 [EMAIL PROTECTED] wrote: > > > Modified: trunk/exp-drd/drd_intercepts.c > > =================================================================== > > --- trunk/exp-drd/drd_intercepts.c 2008-02-28 01:36:38 UTC (rev 7495) > > +++ trunk/exp-drd/drd_intercepts.c 2008-02-28 07:36:04 UTC (rev 7496) > > @@ -116,7 +116,17 @@ > > > > static MutexT mutex_type(pthread_mutex_t* mutex) > > { > > - return pthread_to_drd_mutex_type(mutex->__data.__kind); > > +#if defined(_PTHREAD_DESCR_DEFINED) > > + // Linuxthreads. > > + const int kind = mutex->__m_kind; > > +#elif defined(__SIZEOF_PTHREAD_MUTEX_T) > > + // NPTL. > > + const int kind = mutex->__data.__kind; > > +#else > > + // Another POSIX threads implementation. Regression tests will fail. > > + const int kind = PTHREAD_MUTEX_DEFAULT; > > +#endif > > + return pthread_to_drd_mutex_type(kind); > > } > > I'd be inclined to make the 'else' case abort -- if you don't know what it > is, don't pretend to know...
I'm not entirely happy myself with the above code -- there is e.g. no standard that guarantees that if the macro _PTHREAD_DESCR_DEFINED is defined, that pthread_mutex_t has a data member with the name __m_kind. And in the code above the name PTHREAD_MUTEX_ADAPTIVE_NP is used, which also may cause portability issues. One possible solution is that I add configure test that check for the following: * If the expression &((pthread_mutex_t*)0)->__m_kind compiles, define HAVE_PTHREAD_MUTEX_T__M_KIND. * If the expression &((pthread_mutex_t*)0)->__data.__kind compiles, define HAVE_PTHREAD_MUTEX_T__DATA__KIND. * If the expression PTHREAD_MUTEX_ADAPTIVE_NP compiles, define HAVE_PTHREAD_MUTEX_ADAPTIVE_NP. Since the above tests only test whether or not compilation succeeds, these tests should also work fine when cross-compiling Valgrind. Bart. ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Valgrind-developers mailing list Valgrind-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/valgrind-developers