http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60645

            Bug ID: 60645
           Summary: locale::facet::_S_get_c_locale does not handle
                    __gthread_once error codes.
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: chris at contemporary dot net.au

RTEMS cannot use the posix thread model because the pthread_once call may
return an error code. The code libgcc/gthr-posix.h#696 returns an error yet
libstdc++-v3/src/c++98/locale.cc#209 does not check and handle the returned
error code.

The POSIX reference is:

http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_once.html

The code in question is ...

 204   __c_locale
 205   locale::facet::_S_get_c_locale()
 206   {
 207 #ifdef __GTHREADS
 208     if (__gthread_active_p())
 209       __gthread_once(&_S_once, _S_initialize_once);
 210     else
 211 #endif
 212       {
 213         if (!_S_c_locale)
 214           _S_initialize_once();
 215       }
 216     return _S_c_locale;
 217   }

and ..

 695 static inline int
 696 __gthread_once (__gthread_once_t *__once, void (*__func) (void))
 697 {
 698   if (__gthread_active_p ())
 699     return __gthrw_(pthread_once) (__once, __func);
 700   else
 701     return -1;
 702 }

Reply via email to