Skip to content

bug: possible state leak of buffer_count state between stackprof invocations #207

@dalehamel

Description

@dalehamel

Currently the buffer is only reset after a sample is recorded:

// record the sample previously buffered by stackprof_buffer_sample
static void
stackprof_record_buffer(void)
{
stackprof_record_sample_for_stack(_stackprof.buffer_count, _stackprof.buffer_time.timestamp_usec, _stackprof.buffer_time.delta_usec);
// reset the buffer
_stackprof.buffer_count = 0;
}

However, when stopping stackprof, we may skip this:

stackprof_job_record_buffer(void *data)
{
if (!_stackprof.running) return;
stackprof_record_buffer();
}

This could leave a sample buffered, or for stackprof to believe it has a sample still buffered anyways. Since we never reset this counter between stackprof runs in stackprof_results, it is thus possible that this could bleed state into a future invocation of stackprof

At minimum, I think we must reset this counter as part of stackprof_results, following the existing idiom of resetting values there during reporting. A better behaviour would probably be to pop any buffered but not recorded data off as well, rather than discarding it outright

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions