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();
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;
}

View File

@ -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;