diff --git a/src/artifact_cache/artifact_cache.c b/src/artifact_cache/artifact_cache.c index 3cf7c265..16f7a221 100644 --- a/src/artifact_cache/artifact_cache.c +++ b/src/artifact_cache/artifact_cache.c @@ -361,7 +361,8 @@ ac_async_tick(void) // rjf: compute val B32 retry = 0; - AC_Artifact val = r->create(r->key, r->gen, r->cancel_signal, &retry); + U64 gen = r->gen; + AC_Artifact val = r->create(r->key, r->cancel_signal, &retry, &gen); // rjf: retry? -> resubmit request if(retry && lane_idx() == 0) @@ -411,7 +412,7 @@ ac_async_tick(void) { if(str8_match(n->key, r->key, 0)) { - n->last_completed_gen = r->gen; + n->last_completed_gen = gen; n->val = val; ins_atomic_u64_dec_eval(&n->working_count); ins_atomic_u64_inc_eval(&n->completion_count); @@ -466,7 +467,8 @@ ac_async_tick(void) // rjf: compute val B32 retry = 0; - AC_Artifact val = r->create(r->key, r->gen, r->cancel_signal, &retry); + U64 gen = r->gen; + AC_Artifact val = r->create(r->key, r->cancel_signal, &retry, &gen); // rjf: restore wide lane ctx lane_ctx(lane_ctx_restore); @@ -519,7 +521,7 @@ ac_async_tick(void) { if(str8_match(n->key, r->key, 0)) { - n->last_completed_gen = r->gen; + n->last_completed_gen = gen; n->val = val; ins_atomic_u64_dec_eval(&n->working_count); ins_atomic_u64_inc_eval(&n->completion_count); diff --git a/src/artifact_cache/artifact_cache.h b/src/artifact_cache/artifact_cache.h index b7ebf5c4..1f5bf00c 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, U64 gen, B32 *cancel_signal, B32 *retry_out); +typedef AC_Artifact AC_CreateFunctionType(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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 9134b2ed..3ef242a7 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, U64 gen, B32 *cancel_signal, B32 *retry_out) +ctrl_memory_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out) { AC_Artifact artifact = {0}; { @@ -6098,6 +6098,7 @@ ctrl_memory_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry if((zero_terminated_size > 0 || !key_has_history) && range_size != 0 && pre_read_mem_gen == post_read_mem_gen) { hash = c_submit_data(content_key, &range_arena, str8((U8 *)range_base, zero_terminated_size)); + gen_out[0] = pre_read_mem_gen; } //- rjf: wakeup on new submissions @@ -6369,7 +6370,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, U64 gen, B32 *cancel_signal, B32 *retry_out) +ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out) { AC_Artifact artifact = {0}; { @@ -6565,7 +6566,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, U64 gen, B32 *cancel_signal, B32 *retry_out) +ctrl_call_stack_tree_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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 f220c30a..49cf7b78 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, U64 gen, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact ctrl_memory_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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, U64 gen, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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, U64 gen, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact ctrl_call_stack_tree_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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 f2d92e58..aaa6f86f 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, U64 gen, B32 *cancel_signal, B32 *retry_out) +di_search_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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, U64 gen, B32 *cancel_signal, B32 *retry_out) +di_match_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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 4090003b..0002088a 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, U64 gen, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact di_search_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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, U64 gen, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact di_match_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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 c5af5ab1..43874135 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, U64 gen, B32 *cancel_signal, B32 *retry_out) +dasm_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out) { DASM_Artifact *artifact = 0; if(lane_idx() == 0) diff --git a/src/disasm/disasm.h b/src/disasm/disasm.h index b1cda3fa..11356b8a 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, U64 gen, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact dasm_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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 7d3f12d0..88383adb 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, U64 gen, B32 *cancel_signal, B32 *retry_out) +fs_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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 8b0fb1f5..579f68cc 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, U64 gen, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact fs_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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 b1a9648d..e2786c58 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, U64 gen, B32 *cancel_out, B32 *retry_out) +rd_md5_artifact_create(String8 key, B32 *cancel_out, B32 *retry_out, U64 *gen_out) { AC_Artifact result = {0}; { @@ -1951,7 +1951,7 @@ rd_md5_artifact_create(String8 key, U64 gen, B32 *cancel_out, B32 *retry_out) } internal AC_Artifact -rd_sha1_artifact_create(String8 key, U64 gen, B32 *cancel_out, B32 *retry_out) +rd_sha1_artifact_create(String8 key, B32 *cancel_out, B32 *retry_out, U64 *gen_out) { AC_Artifact result = {0}; { @@ -1968,7 +1968,7 @@ rd_sha1_artifact_create(String8 key, U64 gen, B32 *cancel_out, B32 *retry_out) } internal AC_Artifact -rd_sha256_artifact_create(String8 key, U64 gen, B32 *cancel_out, B32 *retry_out) +rd_sha256_artifact_create(String8 key, B32 *cancel_out, B32 *retry_out, U64 *gen_out) { AC_Artifact result = {0}; { @@ -3843,7 +3843,7 @@ struct RD_BitmapCanvasBoxDrawData }; internal AC_Artifact -rd_bitmap_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) +rd_bitmap_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out) { Access *access = access_open(); @@ -4469,7 +4469,7 @@ struct RD_Geo3DBoxDrawData }; internal AC_Artifact -rd_geo3d_artifact_create(String8 key, U64 gen, B32 *cancel_signal, B32 *retry_out) +rd_geo3d_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out) { Access *access = access_open(); U128 hash = {0}; diff --git a/src/text/text.c b/src/text/text.c index 401e5e63..7b4ef0f8 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, U64 gen, B32 *cancel_signal, B32 *retry_out) +txt_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); diff --git a/src/text/text.h b/src/text/text.h index 532a4631..c34eb64b 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, U64 gen, B32 *cancel_signal, B32 *retry_out); +internal AC_Artifact txt_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_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);