diff --git a/src/artifact_cache/artifact_cache.c b/src/artifact_cache/artifact_cache.c index 535c28d5..3cf7c265 100644 --- a/src/artifact_cache/artifact_cache.c +++ b/src/artifact_cache/artifact_cache.c @@ -361,7 +361,7 @@ ac_async_tick(void) // rjf: compute val B32 retry = 0; - AC_Artifact val = r->create(r->key, r->cancel_signal, &retry); + AC_Artifact val = r->create(r->key, r->gen, r->cancel_signal, &retry); // rjf: retry? -> resubmit request if(retry && lane_idx() == 0) @@ -466,7 +466,7 @@ ac_async_tick(void) // rjf: compute val B32 retry = 0; - AC_Artifact val = r->create(r->key, r->cancel_signal, &retry); + AC_Artifact val = r->create(r->key, r->gen, r->cancel_signal, &retry); // rjf: restore wide lane ctx lane_ctx(lane_ctx_restore); diff --git a/src/artifact_cache/artifact_cache.h b/src/artifact_cache/artifact_cache.h index eab90c4e..b7ebf5c4 100644 --- a/src/artifact_cache/artifact_cache.h +++ b/src/artifact_cache/artifact_cache.h @@ -16,7 +16,7 @@ struct AC_Artifact //////////////////////////////// //~ rjf: Artifact Computation Function Types -typedef AC_Artifact AC_CreateFunctionType(String8 key, B32 *cancel_signal, B32 *retry_out); +typedef AC_Artifact AC_CreateFunctionType(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out); typedef void AC_DestroyFunctionType(AC_Artifact artifact); typedef U32 AC_Flags; diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index 9bc20a44..7312b1d3 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -5977,7 +5977,7 @@ ctrl_thread__single_step(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //~ rjf: Process Memory Artifact Cache Hooks / Lookups internal AC_Artifact -ctrl_memory_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +ctrl_memory_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { AC_Artifact artifact = {0}; { @@ -6007,7 +6007,7 @@ ctrl_memory_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) U64 zero_terminated_size = 0; U64 pre_read_mem_gen = ctrl_mem_gen(); B32 pre_run_state = ins_atomic_u64_eval(&ctrl_state->ctrl_thread_run_state); - if(range_size != 0) + if(pre_read_mem_gen == gen && range_size != 0) { // rjf: set up arena U64 page_size = os_get_system_info()->page_size; // TODO(rjf): @page_size_from_process @@ -6099,10 +6099,13 @@ ctrl_memory_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) { hash = c_submit_data(content_key, &range_arena, str8((U8 *)range_base, zero_terminated_size)); } - else if(range_arena != 0) + else { - arena_release(range_arena); - if(pre_read_mem_gen != post_read_mem_gen && range_size != 0) + if(range_arena != 0) + { + arena_release(range_arena); + } + if((pre_read_mem_gen != gen || pre_read_mem_gen != post_read_mem_gen) && range_size != 0) { retry_out[0] = 1; } @@ -6365,7 +6368,7 @@ ctrl_process_write(CTRL_Handle process, Rng1U64 range, void *src) //~ rjf: Call Stack Artifact Cache Hooks / Lookups internal AC_Artifact -ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +ctrl_call_stack_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { AC_Artifact artifact = {0}; { @@ -6561,7 +6564,7 @@ ctrl_call_stack_from_thread(Access *access, CTRL_Handle thread_handle, B32 high_ //~ rjf: Call Stack Tree Artifact Cache Hooks / Lookups internal AC_Artifact -ctrl_call_stack_tree_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +ctrl_call_stack_tree_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { Temp scratch = scratch_begin(0, 0); Access *access = access_open(); diff --git a/src/ctrl/ctrl_core.h b/src/ctrl/ctrl_core.h index 93ed7dc9..f220c30a 100644 --- a/src/ctrl/ctrl_core.h +++ b/src/ctrl/ctrl_core.h @@ -1002,7 +1002,7 @@ internal void ctrl_thread__single_step(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg); //////////////////////////////// //~ rjf: Process Memory Artifact Cache Hooks / Lookups -internal AC_Artifact ctrl_memory_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact ctrl_memory_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out); internal void ctrl_memory_artifact_destroy(AC_Artifact artifact); internal C_Key ctrl_key_from_process_vaddr_range(CTRL_Handle process, Rng1U64 vaddr_range, B32 zero_terminated, B32 wait_for_fresh, U64 endt_us, B32 *out_is_stale); @@ -1017,14 +1017,14 @@ internal B32 ctrl_process_write(CTRL_Handle process, Rng1U64 range, void *src); //////////////////////////////// //~ rjf: Call Stack Artifact Cache Hooks / Lookups -internal AC_Artifact ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact ctrl_call_stack_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out); internal void ctrl_call_stack_artifact_destroy(AC_Artifact artifact); internal CTRL_CallStack ctrl_call_stack_from_thread(Access *access, CTRL_Handle thread_handle, B32 high_priority, U64 endt_us); //////////////////////////////// //~ rjf: Call Stack Tree Artifact Cache Hooks / Lookups -internal AC_Artifact ctrl_call_stack_tree_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact ctrl_call_stack_tree_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out); internal void ctrl_call_stack_tree_artifact_destroy(AC_Artifact artifact); internal CTRL_CallStackTree ctrl_call_stack_tree(Access *access, U64 endt_us); diff --git a/src/dbg_info/dbg_info.c b/src/dbg_info/dbg_info.c index 5d3b7b9a..f2d92e58 100644 --- a/src/dbg_info/dbg_info.c +++ b/src/dbg_info/dbg_info.c @@ -1023,7 +1023,7 @@ di_conversion_completion_signal_receiver_thread_entry_point(void *p) //~ rjf: Search Artifact Cache Hooks / Lookups internal AC_Artifact -di_search_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +di_search_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { ProfBeginFunction(); Access *access = access_open(); @@ -1451,7 +1451,7 @@ di_search_item_array_from_target_query(Access *access, RDI_SectionKind target, S //~ rjf: Match Artifact Cache Hooks / Lookups internal AC_Artifact -di_match_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +di_match_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); diff --git a/src/dbg_info/dbg_info.h b/src/dbg_info/dbg_info.h index 9d00cf7f..4090003b 100644 --- a/src/dbg_info/dbg_info.h +++ b/src/dbg_info/dbg_info.h @@ -352,14 +352,14 @@ internal void di_conversion_completion_signal_receiver_thread_entry_point(void * //////////////////////////////// //~ rjf: Search Artifact Cache Hooks / Lookups -internal AC_Artifact di_search_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact di_search_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out); internal void di_search_artifact_destroy(AC_Artifact artifact); internal DI_SearchItemArray di_search_item_array_from_target_query(Access *access, RDI_SectionKind target, String8 query, U64 endt_us, B32 *stale_out); //////////////////////////////// //~ rjf: Match Artifact Cache Hooks / Lookups -internal AC_Artifact di_match_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact di_match_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out); internal DI_Match di_match_from_string(String8 string, U64 index, DI_Key preferred_dbgi_key, U64 endt_us); #endif // DBG_INFO_H diff --git a/src/disasm/disasm.c b/src/disasm/disasm.c index 126fd52c..c5af5ab1 100644 --- a/src/disasm/disasm.c +++ b/src/disasm/disasm.c @@ -266,7 +266,7 @@ struct DASM_Artifact }; internal AC_Artifact -dasm_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +dasm_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { DASM_Artifact *artifact = 0; if(lane_idx() == 0) diff --git a/src/disasm/disasm.h b/src/disasm/disasm.h index 0001693c..b1cda3fa 100644 --- a/src/disasm/disasm.h +++ b/src/disasm/disasm.h @@ -197,7 +197,7 @@ internal U64 dasm_line_array_code_off_from_idx(DASM_LineArray *array, U64 idx); //////////////////////////////// //~ rjf: Artifact Cache Hooks / Lookups -internal AC_Artifact dasm_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact dasm_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out); internal void dasm_artifact_destroy(AC_Artifact artifact); internal DASM_Info dasm_info_from_hash_params(Access *access, U128 hash, DASM_Params *params); internal DASM_Info dasm_info_from_key_params(Access *access, C_Key key, DASM_Params *params, U128 *hash_out); diff --git a/src/file_stream/file_stream.c b/src/file_stream/file_stream.c index aa29c8c2..7d3f12d0 100644 --- a/src/file_stream/file_stream.c +++ b/src/file_stream/file_stream.c @@ -32,7 +32,7 @@ fs_change_gen(void) //~ rjf: Cache Interaction internal AC_Artifact -fs_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +fs_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); diff --git a/src/file_stream/file_stream.h b/src/file_stream/file_stream.h index 132debf5..8b0fb1f5 100644 --- a/src/file_stream/file_stream.h +++ b/src/file_stream/file_stream.h @@ -55,7 +55,7 @@ internal U64 fs_change_gen(void); //////////////////////////////// //~ rjf: Artifact Cache Hooks / Accessing API -internal AC_Artifact fs_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact fs_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out); internal void fs_artifact_destroy(AC_Artifact artifact); internal C_Key fs_key_from_path_range(String8 path, Rng1U64 range, U64 endt_us); diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index ec71f5b0..b1a9648d 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -1934,7 +1934,7 @@ RD_VIEW_UI_FUNCTION_DEF(null) {} //~ rjf: text @view_hook_impl internal AC_Artifact -rd_md5_artifact_create(String8 key, B32 *cancel_out, B32 *retry_out) +rd_md5_artifact_create(String8 key, U64 gen, B32 *cancel_out, B32 *retry_out) { AC_Artifact result = {0}; { @@ -1951,7 +1951,7 @@ rd_md5_artifact_create(String8 key, B32 *cancel_out, B32 *retry_out) } internal AC_Artifact -rd_sha1_artifact_create(String8 key, B32 *cancel_out, B32 *retry_out) +rd_sha1_artifact_create(String8 key, U64 gen, B32 *cancel_out, B32 *retry_out) { AC_Artifact result = {0}; { @@ -1968,7 +1968,7 @@ rd_sha1_artifact_create(String8 key, B32 *cancel_out, B32 *retry_out) } internal AC_Artifact -rd_sha256_artifact_create(String8 key, B32 *cancel_out, B32 *retry_out) +rd_sha256_artifact_create(String8 key, U64 gen, B32 *cancel_out, B32 *retry_out) { AC_Artifact result = {0}; { @@ -3843,7 +3843,7 @@ struct RD_BitmapCanvasBoxDrawData }; internal AC_Artifact -rd_bitmap_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +rd_bitmap_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { Access *access = access_open(); @@ -4469,7 +4469,7 @@ struct RD_Geo3DBoxDrawData }; internal AC_Artifact -rd_geo3d_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +rd_geo3d_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { Access *access = access_open(); U128 hash = {0}; diff --git a/src/text/text.c b/src/text/text.c index c81d1e08..401e5e63 100644 --- a/src/text/text.c +++ b/src/text/text.c @@ -1970,7 +1970,7 @@ struct TXT_ArtifactCreateShared }; internal AC_Artifact -txt_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out) +txt_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); diff --git a/src/text/text.h b/src/text/text.h index 06e69bd4..532a4631 100644 --- a/src/text/text.h +++ b/src/text/text.h @@ -203,7 +203,7 @@ internal TXT_ScopeNode *txt_scope_node_from_info_pt(TXT_TextInfo *info, TxtPt pt //////////////////////////////// //~ rjf: Artifact Cache Hooks / Lookups -internal AC_Artifact txt_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact txt_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out); internal void txt_artifact_destroy(AC_Artifact artifact); internal TXT_TextInfo txt_text_info_from_hash_lang(Access *access, U128 hash, TXT_LangKind lang); internal TXT_TextInfo txt_text_info_from_key_lang(Access *access, C_Key key, TXT_LangKind lang, U128 *hash_out);