]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Panics while decoding messages in connection.mainLoopRead would trigger more panics
authorMatt Joiner <anacrolix@gmail.com>
Thu, 31 Aug 2017 06:25:49 +0000 (16:25 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 31 Aug 2017 06:25:49 +0000 (16:25 +1000)
connection.go

index 0b1fed8173834269fa438307604eac33ed2bc858..8ec21010d89c4103bcab6b1a70244b57f5a3cac3 100644 (file)
@@ -749,10 +749,15 @@ func (c *connection) mainReadLoop() error {
                Pool:      t.chunkPool,
        }
        for {
-               cl.mu.Unlock()
-               var msg pp.Message
-               err := decoder.Decode(&msg)
-               cl.mu.Lock()
+               var (
+                       msg pp.Message
+                       err error
+               )
+               func() {
+                       cl.mu.Unlock()
+                       defer cl.mu.Lock()
+                       err = decoder.Decode(&msg)
+               }()
                if cl.closed.IsSet() || c.closed.IsSet() || err == io.EOF {
                        return nil
                }