From 9be4ff1047a09b70edf52754d7b21c0d996ca2ef Mon Sep 17 00:00:00 2001 From: IntegratedQuantum Date: Sun, 2 Feb 2025 21:13:57 +0100 Subject: [PATCH] Store handShakeComplete only after the player has been added to the player list. This prevents a race condition between reconnecting and being added to the list. Should fix #999 --- src/network.zig | 3 +-- src/server/server.zig | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network.zig b/src/network.zig index ec2ce885..3ae33aa1 100644 --- a/src/network.zig +++ b/src/network.zig @@ -637,7 +637,7 @@ pub const Protocols = struct { const stepUserData: u8 = 1; const stepAssets: u8 = 2; const stepServerData: u8 = 3; - const stepComplete: u8 = 255; + pub const stepComplete: u8 = 255; fn receive(conn: *Connection, data: []const u8) !void { if(conn.handShakeState.load(.monotonic) < data[0]) { @@ -678,7 +678,6 @@ pub const Protocols = struct { conn.flush(); conn.mutex.unlock(); conn.handShakeState.store(stepServerData, .monotonic); - conn.handShakeState.store(stepComplete, .monotonic); main.server.connect(conn.user.?); }, stepAssets => { diff --git a/src/server/server.zig b/src/server/server.zig index 35fef900..dfb3c3c2 100644 --- a/src/server/server.zig +++ b/src/server/server.zig @@ -471,6 +471,7 @@ pub fn connectInternal(user: *User) void { userMutex.lock(); users.append(user); userMutex.unlock(); + user.conn.handShakeState.store(main.network.Protocols.handShake.stepComplete, .monotonic); } pub fn messageFrom(msg: []const u8, source: *User) void { // MARK: message