From 7c41fc11e07c10e2e9ae15a9d12f425bf3e20193 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 18 Sep 2024 16:21:22 -0700 Subject: [PATCH] fix up issues with user <-> ctrl thread communication --- src/base/base_meta.c | 4 ++++ src/base/base_meta.h | 1 + src/ctrl/ctrl_core.c | 6 ++++-- src/raddbg/raddbg_core.c | 6 +++--- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/base/base_meta.c b/src/base/base_meta.c index 2ca10816..ea2223c9 100644 --- a/src/base/base_meta.c +++ b/src/base/base_meta.c @@ -339,6 +339,10 @@ deserialized_from_typed_data(Arena *arena, Type *type, String8 data, TypeSeriali }break; } } + if(params->advance_out != 0) + { + params->advance_out[0] = read_off; + } scratch_end(scratch); } return result; diff --git a/src/base/base_meta.h b/src/base/base_meta.h index 5f01627a..ae253222 100644 --- a/src/base/base_meta.h +++ b/src/base/base_meta.h @@ -140,6 +140,7 @@ struct TypeSerializePtrRefInfo typedef struct TypeSerializeParams TypeSerializeParams; struct TypeSerializeParams { + U64 *advance_out; TypeSerializePtrRefInfo *ptr_ref_infos; U64 ptr_ref_infos_count; }; diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index 88f929ea..8c85f091 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -463,8 +463,10 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string) } // rjf: read meta-eval-info array - String8 meta_evals_srlzed = str8_skip(string, read_off); - msg->meta_evals = *struct_from_serialized(arena, CTRL_MetaEvalArray, meta_evals_srlzed); + String8 meta_evals_data = str8_skip(string, read_off); + U64 meta_evals_size = 0; + msg->meta_evals = *struct_from_serialized(arena, CTRL_MetaEvalArray, meta_evals_data, .advance_out = &meta_evals_size); + read_off += meta_evals_size; #if 0 read_off += str8_deserial_read_struct(string, read_off, &msg->meta_eval_infos.count); msg->meta_eval_infos.v = push_array(arena, CTRL_MetaEvalInfo, msg->meta_eval_infos.count); diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 86040d36..684d75f2 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -1860,10 +1860,10 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range) { CTRL_MetaEval *eval = &rd_state->meta_evals.v[space.u64_0]; Temp scratch = scratch_begin(0, 0); - void *offsetify_base = arena_push(scratch.arena, 0, 64); + arena_push(scratch.arena, 0, 64); + void *offsetify_base = push_array(scratch.arena, U8, 0); U64 pos_min = arena_pos(scratch.arena); - TypeSerializePtrRefInfo str_ptr_ref_info = { type(U8), .offsetify_base = offsetify_base}; - String8 eval_srlzed = serialized_from_struct(scratch.arena, CTRL_MetaEval, eval, .ptr_ref_infos_count = 1, .ptr_ref_infos = &str_ptr_ref_info); + String8 eval_srlzed = serialized_from_struct(scratch.arena, CTRL_MetaEval, eval); U64 pos_opl = arena_pos(scratch.arena); Rng1U64 legal_range = r1u64(0, pos_opl-pos_min); if(contains_1u64(legal_range, range.min))