After more digging, when the interval lines up with the total bench time you have a condition percentile->values and percentile->tmp are getting freed then then used. To mitigate most of the cores I encountered I change sb_percentile_reset and sb_percentile_done in sb_percentile.c to the following. This isn't a complete/proper fix though.
void sb_percentile_reset(sb_percentile_t *percentile)
{
int err;
After more digging, when the interval lines up with the total bench time you have a condition percentile->values and percentile->tmp are getting freed then then used. To mitigate most of the cores I encountered I change sb_percentile_reset and sb_percentile_done in sb_percentile.c to the following. This isn't a complete/proper fix though.
void sb_percentile_ reset(sb_ percentile_ t *percentile)
{
int err;
err = pthread_ mutex_lock( &percentile- >mutex) ; >total = 0; percentile- >values, 0, percentile->size * sizeof(unsigned long long)); mutex_unlock( &percentile- >mutex) ;
if( err == 0){
percentile-
memset(
pthread_
}
}
void sb_percentile_ done(sb_ percentile_ t *percentile)
{
int err;
err = pthread_ mutex_destroy( &percentile- >mutex) ; percentile- >values) ; percentile- >tmp);
if( err == 0){
free(
free(
}
}
Another workaround is to use an interval that doesn't line up to total test time.