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; }break;
} }
} }
if(params->advance_out != 0)
{
params->advance_out[0] = read_off;
}
scratch_end(scratch); scratch_end(scratch);
} }
return result; return result;
+1
View File
@@ -140,6 +140,7 @@ struct TypeSerializePtrRefInfo
typedef struct TypeSerializeParams TypeSerializeParams; typedef struct TypeSerializeParams TypeSerializeParams;
struct TypeSerializeParams struct TypeSerializeParams
{ {
U64 *advance_out;
TypeSerializePtrRefInfo *ptr_ref_infos; TypeSerializePtrRefInfo *ptr_ref_infos;
U64 ptr_ref_infos_count; 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 // rjf: read meta-eval-info array
String8 meta_evals_srlzed = str8_skip(string, read_off); String8 meta_evals_data = str8_skip(string, read_off);
msg->meta_evals = *struct_from_serialized(arena, CTRL_MetaEvalArray, meta_evals_srlzed); 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 #if 0
read_off += str8_deserial_read_struct(string, read_off, &msg->meta_eval_infos.count); 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); 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]; CTRL_MetaEval *eval = &rd_state->meta_evals.v[space.u64_0];
Temp scratch = scratch_begin(0, 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); 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);
String8 eval_srlzed = serialized_from_struct(scratch.arena, CTRL_MetaEval, eval, .ptr_ref_infos_count = 1, .ptr_ref_infos = &str_ptr_ref_info);
U64 pos_opl = arena_pos(scratch.arena); U64 pos_opl = arena_pos(scratch.arena);
Rng1U64 legal_range = r1u64(0, pos_opl-pos_min); Rng1U64 legal_range = r1u64(0, pos_opl-pos_min);
if(contains_1u64(legal_range, range.min)) if(contains_1u64(legal_range, range.min))