libsysprof-capture: handle unwind length < 0 gracefully

Also do the snapshot before setting up frame so that unwinders can do
tricks to use extra space before the addr location.
This commit is contained in:
Christian Hergert
2024-09-12 09:22:22 -07:00
parent c9a3ab1401
commit c228634fcb
2 changed files with 7 additions and 3 deletions

View File

@ -1697,7 +1697,7 @@ sysprof_capture_writer_add_allocation (SysprofCaptureWriter *self,
{
SysprofCaptureAllocation *ev;
size_t len;
unsigned int n_addrs;
int n_addrs;
assert (self != NULL);
assert (backtrace_func != NULL);
@ -1707,6 +1707,9 @@ sysprof_capture_writer_add_allocation (SysprofCaptureWriter *self,
if (!ev)
return false;
if ((n_addrs = backtrace_func (ev->addrs, MAX_UNWIND_DEPTH, backtrace_data)) < 0)
n_addrs = 0;
sysprof_capture_writer_frame_init (&ev->frame,
len,
cpu,
@ -1720,8 +1723,6 @@ sysprof_capture_writer_add_allocation (SysprofCaptureWriter *self,
ev->tid = tid;
ev->n_addrs = 0;
n_addrs = backtrace_func (ev->addrs, MAX_UNWIND_DEPTH, backtrace_data);
if (n_addrs <= MAX_UNWIND_DEPTH)
ev->n_addrs = n_addrs;