diff --git a/src/network.zig b/src/network.zig index 6ffb8405..00d499ec 100644 --- a/src/network.zig +++ b/src/network.zig @@ -500,10 +500,12 @@ pub const ConnectionManager = struct { } } - pub fn addConnection(self: *ConnectionManager, conn: *Connection) void { + pub fn addConnection(self: *ConnectionManager, conn: *Connection) error{AlreadyConnected}!void { self.mutex.lock(); defer self.mutex.unlock(); - + for(self.connections.items) |other| { + if(other.remoteAddress.ip == conn.remoteAddress.ip and other.remoteAddress.port == conn.remoteAddress.port) return error.AlreadyConnected; + } self.connections.append(conn); } @@ -1324,7 +1326,7 @@ pub const Connection = struct { break :blk settings.defaultPort; }; - result.manager.addConnection(result); + try result.manager.addConnection(result); return result; } diff --git a/src/server/server.zig b/src/server/server.zig index 70fce406..1c7fdcc8 100644 --- a/src/server/server.zig +++ b/src/server/server.zig @@ -150,14 +150,14 @@ fn init(name: []const u8) void { } fn deinit() void { - for(users.items) |user| { - user.decreaseRefCount(); - } users.clearAndFree(); for(userDeinitList.items) |user| { user.deinit(); } userDeinitList.clearAndFree(); + for(connectionManager.connections.items) |conn| { + conn.user.?.decreaseRefCount(); + } connectionManager.deinit(); connectionManager = undefined;