server: prevent race during resched pump on a closed stream
Fixes #44
diff --git a/server.go b/server.go
index 6ac4c4a..aa0e7bd 100644
--- a/server.go
+++ b/server.go
@@ -631,6 +631,9 @@
case wm := <-sc.wantWriteFrameCh:
sc.writeFrame(wm)
case <-sc.wroteFrameCh:
+ if sc.writingFrame != true {
+ panic("internal error: expected to be already writing a frame")
+ }
sc.writingFrame = false
sc.scheduleFrameWrite()
case fg, ok := <-sc.readFrameCh:
@@ -752,6 +755,7 @@
if sc.writingFrame {
panic("internal error: can only be writing one frame at a time")
}
+ sc.writingFrame = true
st := wm.stream
if st != nil {
@@ -768,7 +772,6 @@
}
}
- sc.writingFrame = true
sc.needsFrameFlush = true
if endsStream(wm.write) {
if st == nil {