DisableCompression bool
 
        // MaxIdleConnsPerHost, if non-zero, controls the maximum idle
-       // (keep-alive) to keep per-host. If zero,
+       // (keep-alive) connections to keep per-host. If zero,
        // DefaultMaxIdleConnsPerHost is used.
        MaxIdleConnsPerHost int
 
                max = DefaultMaxIdleConnsPerHost
        }
        pconn.markReused()
+
        t.idleMu.Lock()
+       defer t.idleMu.Unlock()
 
        waitingDialer := t.idleConnCh[key]
        select {
                // actively dialing, but this conn is ready
                // first). Chrome calls this socket late binding. See
                // https://insouciant.org/tech/connection-management-in-chromium/
-               t.idleMu.Unlock()
                return nil
        default:
                if waitingDialer != nil {
                }
        }
        if t.wantIdle {
-               t.idleMu.Unlock()
                return errWantIdle
        }
        if t.idleConn == nil {
                t.idleConn = make(map[connectMethodKey][]*persistConn)
        }
        if len(t.idleConn[key]) >= max {
-               t.idleMu.Unlock()
                return errTooManyIdle
        }
        for _, exist := range t.idleConn[key] {
                }
        }
        t.idleConn[key] = append(t.idleConn[key], pconn)
-       t.idleMu.Unlock()
        return nil
 }
 
        req *Request
        ch  chan responseAndError // unbuffered; always send in select on callerGone
 
-       // did the Transport (as opposed to the client code) add an
-       // Accept-Encoding gzip header? only if it we set it do
-       // we transparently decode the gzip.
+       // whether the Transport (as opposed to the user client code)
+       // added the Accept-Encoding gzip header. If the Transport
+       // set it, only then do we transparently decode the gzip.
        addedGzip bool
 
        // Optional blocking chan for Expect: 100-continue (for send).