Prevent inviting an IP address twice, which may cause some issues.

Also fixes a memory leak of unconnected connections.
This commit is contained in:
IntegratedQuantum 2024-05-28 19:57:13 +02:00
parent 9d432fbb7b
commit ae0972c587
2 changed files with 8 additions and 6 deletions

View File

@ -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(); self.mutex.lock();
defer self.mutex.unlock(); 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); self.connections.append(conn);
} }
@ -1324,7 +1326,7 @@ pub const Connection = struct {
break :blk settings.defaultPort; break :blk settings.defaultPort;
}; };
result.manager.addConnection(result); try result.manager.addConnection(result);
return result; return result;
} }

View File

@ -150,14 +150,14 @@ fn init(name: []const u8) void {
} }
fn deinit() void { fn deinit() void {
for(users.items) |user| {
user.decreaseRefCount();
}
users.clearAndFree(); users.clearAndFree();
for(userDeinitList.items) |user| { for(userDeinitList.items) |user| {
user.deinit(); user.deinit();
} }
userDeinitList.clearAndFree(); userDeinitList.clearAndFree();
for(connectionManager.connections.items) |conn| {
conn.user.?.decreaseRefCount();
}
connectionManager.deinit(); connectionManager.deinit();
connectionManager = undefined; connectionManager = undefined;