abort/segfault in CVS main

Stefan Olsson stefan@xapa.se
Sun Feb 8 16:13:00 GMT 2004


Forgot the compiler version:
Reading specs from /home/admin/gcc/lib/gcc/i686-pc-linux-gnu/3.5.0/specs
Configured with: ../cvs/gcc/configure --prefix=/home/admin/gcc 
--enable-threads --enable-languages=c,c++
Thread model: posix
gcc version 3.5.0 20040206 (experimental)

Brgds

/Stefan

Stefan Olsson wrote:

> Hi,
>
> I might have a complete meltdown this late friday and miss the 
> obvious, but after the recent changes to mt allocator (interface to 
> allocate etc) my simple testapplication (see attached file) does not 
> work anymore:
> terminate called after throwing an instance of 'terminate called after 
> throwing an instance of 'std::bad_alloc'
> std::bad_alloc'
>  what():  St9bad_alloc
>  what():  St9bad_alloc
> Aborted
>
> Sometimes it segfaults...
> The original test program (that in a modified version now is part of 
> the testsuite) runs just fine however.
>
> I have no idea why? Help? I have done a "cvs update" and a full "make 
> bootstrap" just to be sure...
>
> Btw: The malloc_allocator also complains about missning declarations 
> (for malloc and free) just like the version of mt_allocator currently 
> in cvs. See patch in an earlier email from me today.
>
> Brgds
>
> /Stefan
>
>------------------------------------------------------------------------
>
>#include <ext/mt_allocator.h>
>#include <pthread.h>
>#include <vector>
>
>void* Worker( void* arg )
>{
>  std::vector< std::vector< int, __gnu_cxx::__mt_alloc< int > >, 
>               __gnu_cxx::__mt_alloc< std::vector< int, 
>               __gnu_cxx::__mt_alloc< int > > > > v1;
>
>  for( int i = 0; i < 10000; i++ )
>    {
>      std::vector< int, __gnu_cxx::__mt_alloc< int > > v2;
>
>      for( int j = 0; j < 32; j++ )
>        {
>          v2.push_back( 1 );
>        }
>
>      v1.push_back( v2 );
>    }
>
>  return NULL;
>}
>
>int main()
>{
>  pthread_attr_t pthread_attr_default;
>  pthread_attr_init( &pthread_attr_default );
>
>  int nowo = 32;
>
>  pthread_t *workers[ nowo ];
>  for( int i = 0; i < nowo; i++ )
>    {
>      workers[ i ] = new pthread_t;
>      pthread_create( workers[ i ], &pthread_attr_default, Worker, NULL );
>    }
>
>  for( int i = 0; i < nowo; i++ )
>    {
>      pthread_join( *workers[ i ], NULL );
>    }
>
>  return 0;
>}
>  
>




More information about the Libstdc++ mailing list