From 0c3ae9a048484732181d6ac0bdbc15d86b4db60f Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Wed, 20 Mar 2024 09:24:27 -0700 Subject: [PATCH] ecs: correctly update invalidated pointer post-allocation Potentially fixes hexops/mach#1178 Signed-off-by: Stephen Gutekanst --- src/ecs/entities.zig | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/ecs/entities.zig b/src/ecs/entities.zig index 09b42d84..89defe40 100644 --- a/src/ecs/entities.zig +++ b/src/ecs/entities.zig @@ -315,6 +315,9 @@ pub fn Entities(comptime all_components: anytype) type { const archetype_entry = try entities.archetypeOrPut(columns); if (!archetype_entry.found_existing) { + // Update prev_archetype pointer, as it would now be invalidated due to the allocation + prev_archetype = &entities.archetypes.items[prev_archetype_idx]; + archetype_entry.ptr.* = .{ .len = 0, .capacity = 0, @@ -412,6 +415,9 @@ pub fn Entities(comptime all_components: anytype) type { const archetype_entry = try entities.archetypeOrPut(columns); if (!archetype_entry.found_existing) { + // Update prev_archetype pointer, as it would now be invalidated due to the allocation + prev_archetype = &entities.archetypes.items[prev_archetype_idx]; + archetype_entry.ptr.* = .{ .len = 0, .capacity = 0, @@ -492,6 +498,7 @@ pub fn Entities(comptime all_components: anytype) type { var archetype = entities.archetypeByID(entity); const ptr = entities.entities.get(entity).?; + return archetype.get(ptr.row_index, name_id, Component); } @@ -548,6 +555,9 @@ pub fn Entities(comptime all_components: anytype) type { const archetype_entry = try entities.archetypeOrPut(columns); if (!archetype_entry.found_existing) { + // Update prev_archetype pointer, as it would now be invalidated due to the allocation + prev_archetype = &entities.archetypes.items[prev_archetype_idx]; + archetype_entry.ptr.* = .{ .len = 0, .capacity = 0,