Skip to content

Commit 065b6ce

Browse files
authored
Merge pull request #95 from envoy/fix-memory-leaks
Fix memory leaks in HTTPConnection
2 parents 1f1fe7e + 9989790 commit 065b6ce

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

Sources/DefaultHTTPServer.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public final class DefaultHTTPServer: HTTPServer {
9595
logger: logger
9696
)
9797
connections.insert(connection)
98-
connection.closedCallback = { [unowned self] in
98+
connection.closedCallback = { [unowned self, unowned connection] in
9999
self.connections.remove(connection)
100100
}
101101
logger.info("New connection \(connection.uuid) from [\(address)]:\(port)")

Sources/HTTPConnection.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,18 @@ public final class HTTPConnection {
5858
self.eventLoop = eventLoop
5959
self.closedCallback = closedCallback
6060

61-
transport.readDataCallback = handleDataReceived
62-
transport.closedCallback = handleConnectionClosed
61+
transport.readDataCallback = { [unowned self] data in
62+
self.handleDataReceived(data)
63+
}
64+
transport.closedCallback = { [unowned self] reason in
65+
self.handleConnectionClosed(reason)
66+
}
6367

6468
let propagateHandler = PropagateLogHandler(logger: logger)
6569
let contextHandler = TransformLogHandler(
6670
handler: propagateHandler
6771
) { [unowned self] record in
68-
return record.overwriteMessage { [unowned self] in"[\(self.uuid)] \($0.message)" }
72+
return record.overwriteMessage { [unowned self] in "[\(self.uuid)] \($0.message)" }
6973
}
7074
self.logger.add(handler: contextHandler)
7175
}
@@ -133,7 +137,9 @@ public final class HTTPConnection {
133137
// set SWSGI keys
134138
environ["swsgi.version"] = "0.1"
135139
environ["swsgi.url_scheme"] = "http"
136-
environ["swsgi.input"] = swsgiInput
140+
environ["swsgi.input"] = { [unowned self] (handler: ((Data) -> Void)?) in
141+
self.swsgiInput(handler)
142+
}
137143
// TODO: add output file for error
138144
environ["swsgi.error"] = ""
139145
environ["swsgi.multithread"] = false

0 commit comments

Comments
 (0)