diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 98c750a9..8c560241 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -11459,7 +11459,6 @@ rd_frame(void) // Access *frame_access_restore = rd_state->frame_access; rd_state->frame_access = access_open(); - rd_state->got_frame_call_stack_tree = 0; ////////////////////////////// //- rjf: calculate avg length in us of last many frames diff --git a/src/raddbg/raddbg_core.h b/src/raddbg/raddbg_core.h index dcc4a6b9..7afccd02 100644 --- a/src/raddbg/raddbg_core.h +++ b/src/raddbg/raddbg_core.h @@ -579,8 +579,6 @@ struct RD_State // rjf: frame parameters F32 frame_dt; Access *frame_access; - CTRL_CallStackTree frame_call_stack_tree; - B32 got_frame_call_stack_tree; // rjf: evaluation cache E_Cache *eval_cache; diff --git a/src/raddbg/raddbg_eval.c b/src/raddbg/raddbg_eval.c index 785f1475..291ac872 100644 --- a/src/raddbg/raddbg_eval.c +++ b/src/raddbg/raddbg_eval.c @@ -1558,17 +1558,15 @@ struct RD_CallStackTreeExpandAccel E_TYPE_EXPAND_INFO_FUNCTION_DEF(call_stack_tree) { - if(!rd_state->got_frame_call_stack_tree) - { - rd_state->got_frame_call_stack_tree = 1; - rd_state->frame_call_stack_tree = ctrl_call_stack_tree(rd_state->frame_access, 0); - } + Access *access = access_open(); + CTRL_CallStackTree call_stack_tree = ctrl_call_stack_tree(access, 0); + access_close(access); RD_CallStackTreeExpandAccel *accel = push_array(arena, RD_CallStackTreeExpandAccel, 1); accel->node = &ctrl_call_stack_tree_node_nil; U64 id = e_value_eval_from_eval(eval).value.u64; - if(rd_state->frame_call_stack_tree.slots_count != 0) + if(call_stack_tree.slots_count != 0) { - for(CTRL_CallStackTreeNode *n = rd_state->frame_call_stack_tree.slots[id%rd_state->frame_call_stack_tree.slots_count]; + for(CTRL_CallStackTreeNode *n = call_stack_tree.slots[id%call_stack_tree.slots_count]; n != 0; n = n->hash_next) {