fix double-load in radbin conversion path; fix incorrect mutation of potentially-nil trees when snapping to a file without a specific line; fix di_close path when work is occurring

This commit is contained in:
Ryan Fleury
2025-06-18 09:56:47 -07:00
parent 401f117653
commit bee2570d39
6 changed files with 18 additions and 21 deletions
+3
View File
@@ -48,6 +48,9 @@ commands =
//- rjf: [raddbg]
.f1 = { .win = "raddbg_stable --ipc kill_all && build raddbg telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: [scratch]
.f2 = { .win = "raddbg_stable --ipc kill_all && build radbin release telemetry && raddbg_stable --ipc run", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: [textperf]
// .f1 = { .win = "raddbg_stable --ipc kill_all && build no_meta telemetry textperf && raddbg_stable --ipc bring_to_front && raddbg_stable --ipc run", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
+1 -9
View File
@@ -4879,15 +4879,7 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg,
}
}
//- rjf: for each pre-emptively loaded key, try to grab RDI - kicking off parse
for(DI_KeyNode *n = preemptively_loaded_keys.first; n != 0; n = n->next)
{
DI_Scope *di_scope = di_scope_open();
RDI_Parsed *rdi = di_rdi_from_key(di_scope, &n->v, 0, 0);
di_scope_close(di_scope);
}
//- rjf: close all pre-emptively loaded keys
//- rjf: close each pre-emptively loaded key
for(DI_KeyNode *n = preemptively_loaded_keys.first; n != 0; n = n->next)
{
di_close(&n->v);
+3 -3
View File
@@ -531,7 +531,6 @@ di_close(DI_Key *key)
DI_Slot *slot = &di_shared->slots[slot_idx];
DI_Stripe *stripe = &di_shared->stripes[stripe_idx];
log_infof("close_debug_info: {\"%S\", 0x%I64x}\n", key_normalized.path, key_normalized.min_timestamp);
B32 closed = 0;
OS_MutexScopeW(stripe->rw_mutex)
{
//- rjf: find existing node
@@ -544,7 +543,8 @@ di_close(DI_Key *key)
if(node->ref_count == 0) for(;;)
{
//- rjf: release
if(ins_atomic_u64_eval(&node->touch_count) == 0)
if(ins_atomic_u64_eval(&node->touch_count) == 0 &&
ins_atomic_u64_eval(&node->is_working) == 0)
{
di_string_release__stripe_mutex_w_guarded(stripe, node->key.path);
if(node->file_base != 0)
@@ -568,7 +568,7 @@ di_close(DI_Key *key)
break;
}
//- rjf: wait for touch count to go to 0
//- rjf: wait for touch count / working marker to go to 0
os_condition_variable_wait_rw_w(stripe->cv, stripe->rw_mutex, max_U64);
}
}
+6 -4
View File
@@ -22,6 +22,7 @@ rb_entry_point(CmdLine *cmdline)
//- rjf: analyze & load command line input files
//
RB_FileList input_files = {0};
ProfScope("analyze & load command line input files")
{
String8List input_file_path_tasks = str8_list_copy(arena, &cmdline->inputs);
for(String8Node *n = input_file_path_tasks.first; n != 0; n = n->next)
@@ -31,6 +32,7 @@ rb_entry_point(CmdLine *cmdline)
//
RB_FileFormat file_format = RB_FileFormat_Null;
RB_FileFormatFlags file_format_flags = 0;
ProfScope("do thin analysis of file")
{
OS_Handle file = os_file_open(OS_AccessFlag_Read, n->string);
FileProperties props = os_properties_from_file(file);
@@ -232,7 +234,7 @@ rb_entry_point(CmdLine *cmdline)
//- rjf: load recognized files
//
String8 file_data = {0};
if(file_format != RB_FileFormat_Null)
if(file_format != RB_FileFormat_Null) ProfScope("load recognized file")
{
file_data = os_data_from_file_path(arena, n->string);
}
@@ -240,7 +242,7 @@ rb_entry_point(CmdLine *cmdline)
//////////////////////////
//- rjf: PE format => generate new implicit path tasks for PDBs
//
if(file_format == RB_FileFormat_PE)
if(file_format == RB_FileFormat_PE) ProfScope("PE file => generate task for PDB")
{
Temp scratch = scratch_begin(&arena, 1);
PE_BinInfo pe_bin_info = pe_bin_info_from_data(scratch.arena, file_data);
@@ -656,8 +658,8 @@ rb_entry_point(CmdLine *cmdline)
RB_File *pdb_file = rb_file_list_first(&input_files_from_format_table[RB_FileFormat_PDB]);
String8 exe_path = exe_file->path;
String8 pdb_path = pdb_file->path;
String8 exe_data = os_data_from_file_path(arena, exe_path);
String8 pdb_data = os_data_from_file_path(arena, pdb_path);
String8 exe_data = exe_file->data;
String8 pdb_data = pdb_file->data;
// rjf: convert
P2R_ConvertParams convert_params = {0};
+4 -4
View File
@@ -15121,10 +15121,10 @@ rd_frame(void)
vs->last_frame_index_built = 0;
RD_Cfg *expr = rd_cfg_child_from_string_or_alloc(dst_tab, str8_lit("expression"));
rd_cfg_new_replace(expr, rd_eval_string_from_file_path(scratch.arena, file_path));
rd_cfg_new_replace(rd_cfg_child_from_string(dst_tab, str8_lit("cursor_line")), str8_lit("1"));
rd_cfg_new_replace(rd_cfg_child_from_string(dst_tab, str8_lit("cursor_column")), str8_lit("1"));
rd_cfg_new_replace(rd_cfg_child_from_string(dst_tab, str8_lit("mark_line")), str8_lit("1"));
rd_cfg_new_replace(rd_cfg_child_from_string(dst_tab, str8_lit("mark_column")), str8_lit("1"));
rd_cfg_new_replace(rd_cfg_child_from_string_or_alloc(dst_tab, str8_lit("cursor_line")), str8_lit("1"));
rd_cfg_new_replace(rd_cfg_child_from_string_or_alloc(dst_tab, str8_lit("cursor_column")), str8_lit("1"));
rd_cfg_new_replace(rd_cfg_child_from_string_or_alloc(dst_tab, str8_lit("mark_line")), str8_lit("1"));
rd_cfg_new_replace(rd_cfg_child_from_string_or_alloc(dst_tab, str8_lit("mark_column")), str8_lit("1"));
}
else if(dst_panel != &rd_nil_panel_node && dst_tab == &rd_nil_cfg)
{
+1 -1
View File
@@ -917,7 +917,7 @@ rdim_bake(Arena *arena, ASYNC_Root *async_root, RDIM_BakeParams *in_params)
ASYNC_TaskList sort_bake_string_map_tasks = {0};
RDIM_BakeStringMapLoose *sorted_bake_string_map__in_progress = rdim_bake_string_map_loose_make(arena, &bake_string_map_topology);
{
U64 slots_per_task = 4096;
U64 slots_per_task = 256;
U64 num_tasks = (bake_string_map_topology.slots_count+slots_per_task-1)/slots_per_task;
for(U64 task_idx = 0; task_idx < num_tasks; task_idx += 1)
{