From 1bd09ee6902203f4453aed3206c0e471b341303d Mon Sep 17 00:00:00 2001 From: Carl Jackson Date: Sat, 30 May 2015 17:05:40 -0400 Subject: [PATCH] Allow closing of hijacked connections I think this is a regression introduced by c1922ab1. Fixes #130. --- graceful/listener/conn.go | 4 +++- graceful/listener/conn_test.go | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/graceful/listener/conn.go b/graceful/listener/conn.go index 3f797c5..7b34b47 100644 --- a/graceful/listener/conn.go +++ b/graceful/listener/conn.go @@ -65,7 +65,9 @@ func (c *conn) Close() error { c.mu.Lock() defer c.mu.Unlock() - if c.closed || c.disowned { + if c.disowned { + return c.Conn.Close() + } else if c.closed { return errClosing } diff --git a/graceful/listener/conn_test.go b/graceful/listener/conn_test.go index cd5d878..ff26e32 100644 --- a/graceful/listener/conn_test.go +++ b/graceful/listener/conn_test.go @@ -90,6 +90,22 @@ func TestCloseConn(t *testing.T) { } } +// Regression test for issue #130. +func TestDisownedClose(t *testing.T) { + t.Parallel() + _, c, wc := singleConn(t, Deadline) + + if err := Disown(wc); err != nil { + t.Fatalf("unexpected error disowning conn: %v", err) + } + if err := wc.Close(); err != nil { + t.Errorf("error closing connection: %v", err) + } + if !c.Closed() { + t.Errorf("connection didn't get closed") + } +} + func TestManualReadDeadline(t *testing.T) { t.Parallel() l, c, wc := singleConn(t, Manual)