fix up issues with user <-> ctrl thread communication

This commit is contained in:
Ryan Fleury
2024-09-18 16:21:22 -07:00
parent 546e6e695f
commit 7c41fc11e0
4 changed files with 12 additions and 5 deletions
+4
View File
@@ -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;
+1
View File
@@ -140,6 +140,7 @@ struct TypeSerializePtrRefInfo
typedef struct TypeSerializeParams TypeSerializeParams;
struct TypeSerializeParams
{
U64 *advance_out;
TypeSerializePtrRefInfo *ptr_ref_infos;
U64 ptr_ref_infos_count;
};
+4 -2
View File
@@ -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);
+3 -3
View File
@@ -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))