2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-21 15:02:19 +00:00

Debug CI crash 22/n [skip ci]

This commit is contained in:
Rene Rivera
2022-04-16 10:34:20 -05:00
parent ba9ff8e53c
commit 601047d0d3

View File

@@ -283,32 +283,17 @@ struct _stack
_stack()
{
static int32_t ctor_count = 0;
++ctor_count;
assert( ctor_count == 1 );
int32_t const size = 1 << 21;
start = BJAM_MALLOC( size );
end = (char *)start + size;
data_backup = data = end;
}
~_stack()
{
static int32_t dtor_count = 0;
++dtor_count;
assert( dtor_count == 1 );
}
void done()
{
static int32_t done_count = 0;
++done_count;
assert( done_count == 1 );
if ( cleanups_size > 0 )
{
// err_printf( "STACK: %d, ITEMS: %d\n", (char*)get_end() - (char*)get_data(), cleanups.size() );
// err_printf( "STACK: %d, ITEMS: %d\n", (char*)end - (char*)get_data(), cleanups.size() );
// err_flush();
while ( cleanups_size > 0 )
{
@@ -316,10 +301,10 @@ struct _stack
cleanups[cleanups_size].function(
cleanups[cleanups_size].stack, cleanups[cleanups_size].count );
}
// err_printf( "STACK: %d, ITEMS: %d\n", (char*)get_end() - (char*)get_data(), cleanups.size() );
// err_printf( "STACK: %d, ITEMS: %d\n", (char*)end - (char*)get_data(), cleanups.size() );
// err_flush();
}
BJAM_FREE( get_start() );
BJAM_FREE( start );
data_backup = start = end = data = nullptr;
}
@@ -391,48 +376,26 @@ struct _stack
#define LISTPTR_ALIGN_BASE ( sizeof( struct list_alignment_helper ) - sizeof( LIST * ) )
#define LISTPTR_ALIGN ( ( LISTPTR_ALIGN_BASE > sizeof( LIST * ) ) ? sizeof( LIST * ) : LISTPTR_ALIGN_BASE )
void set_data(void * d)
inline void set_data(void * d)
{
assert( (start < d && d <= end) || (start <= d && d < end) );
assert( ((ptrdiff_t)d) % LISTPTR_ALIGN == 0 );
assert( ((ptrdiff_t)d) > (1<<4) );
data_backup = data = d;
}
void * get_data() const
inline void * get_data()
{
assert( data == data_backup );
if ( data != data_backup ) data = data_backup;
assert( (start < data && data <= end) || (start <= data && data < end) );
assert( ((ptrdiff_t)data) % LISTPTR_ALIGN == 0 );
assert( ((ptrdiff_t)start) > (1<<4) );
assert( ((ptrdiff_t)data) > (1<<4) );
assert( ((ptrdiff_t)end) > (1<<4) );
return data;
}
void * get_end() const
{
assert( data == data_backup );
assert( (start < data && data <= end) || (start <= data && data < end) );
return end;
}
void * get_start() const
{
assert( data == data_backup );
assert( (start < data && data <= end) || (start <= data && data < end) );
return start;
}
template <typename T>
remove_cref_t<T> * nth( int32_t n )
{
using U = remove_cref_t<T>;
assert( n > -1000 );
assert( n < 1000 );
remove_cref_t<T> * result = &( static_cast<U*>( get_data() )[n] );
assert( ((ptrdiff_t)result) > (1<<4) );
return result;
return &( static_cast<U*>( get_data() )[n] );
}
template <typename T>
@@ -519,7 +482,7 @@ void _stack::cleanup_push( int32_t n, T*_ )
cleanups[cleanups_size++] = ci;
}
STACK * stack_global()
static STACK * stack_global()
{
static STACK result;
return &result;