]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: simplify serve() connection close
authorDave Cheney <dave@cheney.net>
Fri, 21 Dec 2012 04:14:38 +0000 (15:14 +1100)
committerDave Cheney <dave@cheney.net>
Fri, 21 Dec 2012 04:14:38 +0000 (15:14 +1100)
Followup to 6971049.

R=bradfitz
CC=golang-dev
https://golang.org/cl/6970049

src/pkg/net/http/server.go

index 3303891f755c6c451c74787262a17039b8bf1885..89a46f06bb2054de05454ba457222e38ae64e41e 100644 (file)
@@ -702,25 +702,19 @@ func (c *conn) closeWriteAndWait() {
 // Serve a new connection.
 func (c *conn) serve() {
        defer func() {
-               err := recover()
-               if err == nil {
-                       return
+               if err := recover(); err != nil {
+                       const size = 4096
+                       buf := make([]byte, size)
+                       buf = buf[:runtime.Stack(buf, false)]
+                       log.Printf("http: panic serving %v: %v\n%s", c.remoteAddr, err, buf)
                }
-
-               const size = 4096
-               buf := make([]byte, size)
-               buf = buf[:runtime.Stack(buf, false)]
-               log.Printf("http: panic serving %v: %v\n%s", c.remoteAddr, err, buf)
-
-               if c.rwc != nil { // may be nil if connection hijacked
-                       c.rwc.Close()
+               if !c.hijacked() {
+                       c.close()
                }
        }()
-       defer c.close()
 
        if tlsConn, ok := c.rwc.(*tls.Conn); ok {
                if err := tlsConn.Handshake(); err != nil {
-                       c.close()
                        return
                }
                c.tlsState = new(tls.ConnectionState)