Browse Source

Move initial settings writing to writing goroutine.

Brad Fitzpatrick 11 years ago
parent
commit
7a430dbfa1
1 changed files with 6 additions and 4 deletions
  1. 6 4
      server.go

+ 6 - 4
server.go

@@ -331,10 +331,7 @@ func (sc *serverConn) serve() {
 
 
 	sc.vlogf("HTTP/2 connection from %v on %p", sc.conn.RemoteAddr(), sc.hs)
 	sc.vlogf("HTTP/2 connection from %v on %p", sc.conn.RemoteAddr(), sc.hs)
 
 
-	if err := sc.framer.WriteSettings( /* TODO: actual settings */ ); err != nil {
-		sc.logf("error writing server's initial settings: %v", err)
-		return
-	}
+	sc.enqueueFrameWrite(frameWriteMsg{write: (*serverConn).sendInitialSettings})
 
 
 	if err := sc.readPreface(); err != nil {
 	if err := sc.readPreface(); err != nil {
 		sc.condlogf(err, "Error reading preface from client %v: %v", sc.conn.RemoteAddr(), err)
 		sc.condlogf(err, "Error reading preface from client %v: %v", sc.conn.RemoteAddr(), err)
@@ -369,6 +366,11 @@ func (sc *serverConn) serve() {
 	}
 	}
 }
 }
 
 
+func (sc *serverConn) sendInitialSettings(_ interface{}) error {
+	sc.writeG.check()
+	return sc.framer.WriteSettings( /* TODO: actual settings */ )
+}
+
 // readPreface reads the ClientPreface greeting from the peer
 // readPreface reads the ClientPreface greeting from the peer
 // or returns an error on timeout or an invalid greeting.
 // or returns an error on timeout or an invalid greeting.
 func (sc *serverConn) readPreface() error {
 func (sc *serverConn) readPreface() error {