PTHREAD_INVARIANTS in 5.x
Scott Long
scottl at samsco.org
Thu May 12 06:13:48 PDT 2005
Daniel Eischen wrote:
> On Wed, 11 May 2005, Jonathan Noack wrote:
>
>>I checked out _PTHREADS_INVARIANTS for libthr and libpthread on CURRENT.
>> As far as I can tell, all but one of the defines under
>>_PTHREADS_INVARIANTS are ASSERTs; they check for a condition and if it
>>is false result in a fatal error. These should be very visible if they
>>are being tripped. Only MUTEX_INIT_LINK actually *does* something. It
>>is defined in src/lib/libpthread/thread/thr_mutex.c at lines 43-46 and
>>in src/lib/libthr/thread/thr_mutex.c at lines 44-47:
>>
>>#define MUTEX_INIT_LINK(m) do { \
>> (m)->m_qe.tqe_prev = NULL; \
>> (m)->m_qe.tqe_next = NULL; \
>>} while (0)
>>
>>I'm not sure what impact removing this explicit initialization would
>>have. If we're not seeing fatal errors, everything else is just slowing
>>us down. Assuming we feel our thread implementations are production
>>worthy, we should disable these checks for releases. That is, unless I
>>am missing something...
>
>
> I wrote the darn things, and they are useful in that they can
> provide useful information if there are bugs and also for
> detecting if the application is linked to multiple thread
> libraries. For the init links macro, it is only used when
> the mutex is initialized and on unlock. It's two instructions.
> The others are also just a couple of instructions and shouldn't
> be called often.
>
> This is way overblown and they're other areas for much
> better optimizations than worrying about a couple of
> instructions. Perhaps if it were called _PTHREAD_ROBUST
> instead of _PTHREAD_INVARIANTS, noone would notice ;-)
>
> That's the last I'll say. re@ can do whatever they want
> with my blessing.
>
Yes, the check for the cross-linked threads libraries is still quite
useful. However, we gave a general policy of turning off most other
debugging and invariants tools for production releases. A good example
is the malloc debugging options that are on in HEAD and off in RELENG_5.
Would we be able to reach a compromise similar to that?
Scott
More information about the freebsd-stable
mailing list