diff options
author | Korhonen Sami (Samlink) <k847259@ubuntu.saminet.fi> | 2020-07-09 15:11:44 +0300 |
---|---|---|
committer | Korhonen Sami (Samlink) <k847259@ubuntu.saminet.fi> | 2020-07-09 22:16:07 +0300 |
commit | cf64e3cad89053e85071760eb911b58739867163 (patch) | |
tree | 0b56492c62fff6b4280ef0bb7dda2c325fa928d4 | |
parent | d9cd0032f7478e625329326d7593162a9f1e8c1e (diff) | |
download | podman-cf64e3cad89053e85071760eb911b58739867163.tar.gz podman-cf64e3cad89053e85071760eb911b58739867163.tar.bz2 podman-cf64e3cad89053e85071760eb911b58739867163.zip |
Remove hijacked connections from active connections list
StateHijacked is a terminal state. If hijacked connection
is registered as an active connection, connection will
never be unregistered. This causes two issues
First issue is that active connection counters are off.
Second issue is a resource leak caused by connection
object that is stored to a map.
After this patch hijacked connections are no longer
visible in counters. If a counter for hijacked
connections is required, podman must track
connections returned by Hijacker.Hijack()
It might make sense to develop abstraction layer for
hijacking - and move all hijacking related code to a
separate package. Hijacking code is prone to resource
leaks and it should be thoroughly tested.
Signed-off-by: Sami Korhonen <skorhone@gmail.com>
-rw-r--r-- | pkg/api/server/server.go | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/pkg/api/server/server.go b/pkg/api/server/server.go index 8af6d3186..f5b17ab68 100644 --- a/pkg/api/server/server.go +++ b/pkg/api/server/server.go @@ -255,14 +255,14 @@ func (t *IdleTracker) ConnState(conn net.Conn, state http.ConnState) { oldActive := len(t.active) logrus.Debugf("IdleTracker %p:%v %d/%d connection(s)", conn, state, t.ActiveConnections(), t.TotalConnections()) switch state { - case http.StateNew, http.StateActive, http.StateHijacked: + case http.StateNew, http.StateActive: t.active[conn] = struct{}{} // stop the timer if we transitioned from idle if oldActive == 0 { t.timer.Stop() } t.total++ - case http.StateIdle, http.StateClosed: + case http.StateIdle, http.StateClosed, http.StateHijacked: delete(t.active, conn) // Restart the timer if we've become idle if oldActive > 0 && len(t.active) == 0 { |