From c0d28e0ced5d92681e68692cc2507a2e468e62f1 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Thu, 23 Oct 2025 17:41:49 -0700 Subject: [PATCH] only retry call stacks on stale / gen tears, *not* on errored frames. --- src/ctrl/ctrl_core.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index 91af171a..e343fa14 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -6502,6 +6502,7 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, //- rjf: compute call stack CTRL_Entity *thread = ctrl_entity_from_handle(entity_ctx, thread_handle); B32 good = 1; + B32 retry = 0; Arena *arena = 0; CTRL_CallStack *call_stack = 0; if(thread != &ctrl_entity_nil) @@ -6524,12 +6525,17 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, good = 1; call_stack[0] = ctrl_call_stack_from_unwind(arena, process, &unwind); } + if(unwind.flags & CTRL_UnwindFlag_Stale) + { + retry = 1; + } post_reg_gen = ctrl_reg_gen(); post_mem_gen = ctrl_mem_gen(); } if(pre_reg_gen != post_reg_gen || pre_mem_gen != post_mem_gen) { good = 0; + retry = 1; } if(!good) { @@ -6550,11 +6556,8 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, artifact.u64[1] = (U64)call_stack; } - //- rjf: retry on bad - if(!good) - { - retry_out[0] = 1; - } + //- rjf: mark retry + retry_out[0] = retry; scratch_end(scratch); }