bug in gcc-3.2.3/gcc/gthr_rtems.h

EL KOLLI Yacine yacine.elkolli at crf.canon.fr
Mon Apr 19 09:12:30 UTC 2004


I think there is a bug in gthr_rtems.h in the gcc-3.2.3 source tree 
under gcc-3.2.3/gcc/gthr_rtems.h.

In this file   __GTHREAD_MUTEX_INIT is define to 0 and 
__GTHREAD_MUTEX_INIT_FUNCTION   is defined to rtems_gxx_mutex_init.

But a comment in gthr.h states:
      	to initialize __gthread_mutex_t to get a fast
	non-recursive mutex.
      	some systems can't initialize a mutex without a
	function call.  On such systems, define this to a
	function which looks like this:
	void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *)
	Don't define __GTHREAD_MUTEX_INIT in this case

The result of having defined __GTHREAD_MUTEX_INIT is that the STL global 
constructor does not call rtems_gxx_mutex_init to init its mutex, but 
rather use the statically defined value 0.
All locking performed by the STL lib on this mutex fail with return 
value OBJECT_ERROR, which seems not be tested.

I've recompiled gcc with __THREAD_MUTEX_INIT left undefined. Now STL 
constructor is calling rtems_gxx_mutex_init , and nothing seems broken.

Any comments ?

Y El Kolli.

EL KOLLI Yacine         | yacine.elkolli at crf.canon.fr
Canon C.R.F.            | Phone: +33.(0)
http://www.crf.canon.fr | FAX: +33.(0)

More information about the users mailing list