Skip to content

Commit c0d28e0

Browse files
committed
only retry call stacks on stale / gen tears, *not* on errored frames.
1 parent e6c3942 commit c0d28e0

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/ctrl/ctrl_core.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6502,6 +6502,7 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out,
65026502
//- rjf: compute call stack
65036503
CTRL_Entity *thread = ctrl_entity_from_handle(entity_ctx, thread_handle);
65046504
B32 good = 1;
6505+
B32 retry = 0;
65056506
Arena *arena = 0;
65066507
CTRL_CallStack *call_stack = 0;
65076508
if(thread != &ctrl_entity_nil)
@@ -6524,12 +6525,17 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out,
65246525
good = 1;
65256526
call_stack[0] = ctrl_call_stack_from_unwind(arena, process, &unwind);
65266527
}
6528+
if(unwind.flags & CTRL_UnwindFlag_Stale)
6529+
{
6530+
retry = 1;
6531+
}
65276532
post_reg_gen = ctrl_reg_gen();
65286533
post_mem_gen = ctrl_mem_gen();
65296534
}
65306535
if(pre_reg_gen != post_reg_gen || pre_mem_gen != post_mem_gen)
65316536
{
65326537
good = 0;
6538+
retry = 1;
65336539
}
65346540
if(!good)
65356541
{
@@ -6550,11 +6556,8 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out,
65506556
artifact.u64[1] = (U64)call_stack;
65516557
}
65526558

6553-
//- rjf: retry on bad
6554-
if(!good)
6555-
{
6556-
retry_out[0] = 1;
6557-
}
6559+
//- rjf: mark retry
6560+
retry_out[0] = retry;
65586561

65596562
scratch_end(scratch);
65606563
}

0 commit comments

Comments
 (0)