BlueSocket icon indicating copy to clipboard operation
BlueSocket copied to clipboard

Memory leak when using Socket.readString

Open johannes87 opened this issue 5 years ago • 1 comments

The following code results in a big amount of memory being allocated by the process that is not being released. After 20k connections, the used memory of the process is more than 100MB. After removing the call to readString, the memory usage does not increase anymore. I tested this with BlueSocket 1.0.52.

var i = 0
while true {
    let socket = try Socket.create()
    try! socket.connect(to: "localhost", port: 31337)
    let serviceResponse = try! socket.readString()!

    i += 1
    print(i, String(describing: serviceResponse))
    Thread.sleep(forTimeInterval: 0.001)
}

The socket connects to a service that first responds with "foobar" and then closes the connection.

The code for reproducing this can be found in the repository https://github.com/johannes87/TestBlueSocketMemoryLeak

The target TestService inside the Xcode project is the "foobar" service mentioned above.

johannes87 avatar Jul 14 '20 14:07 johannes87

I noticed that when I run dispatchMain() after the loop (and changing the while condition to e.g. "i < 20000"), the process uses less memory again. Before the connection loop, the memory usage is about 6MB, and after calling dispatchMain it is about 25MB. The maximum amount of memory used was ~135MB.

johannes87 avatar Jul 14 '20 15:07 johannes87