Write PING acks on the right goroutine, rename a few things
diff --git a/server.go b/server.go
index 8ae0bab..391b979 100644
--- a/server.go
+++ b/server.go
@@ -499,7 +499,17 @@
 		// PROTOCOL_ERROR."
 		return ConnectionError(ErrCodeProtocol)
 	}
-	return sc.framer.WritePing(true, f.Data)
+	sc.wantWriteFrameCh <- frameWriteMsg{
+		write: (*serverConn).writePingAck,
+		v:     f,
+	}
+	return nil
+}
+
+func (sc *serverConn) writePingAck(v interface{}) error {
+	sc.writeG.check()
+	pf := v.(*PingFrame) // contains the data we need to write back
+	return sc.framer.WritePing(true, pf.Data)
 }
 
 func (sc *serverConn) processWindowUpdate(f *WindowUpdateFrame) error {
@@ -808,7 +818,7 @@
 
 // called from handler goroutines.
 // h may be nil.
-func (sc *serverConn) writeHeader(req headerWriteReq) {
+func (sc *serverConn) writeHeaders(req headerWriteReq) {
 	var errc chan error
 	if req.h != nil {
 		// If there's a header map (which we don't own), so we have to block on
@@ -818,7 +828,7 @@
 		errc = make(chan error, 1)
 	}
 	sc.wantWriteFrameCh <- frameWriteMsg{
-		write:    (*serverConn).writeHeaderInLoop,
+		write:    (*serverConn).writeHeadersFrame,
 		v:        req,
 		streamID: req.streamID,
 		done:     errc,
@@ -828,7 +838,7 @@
 	}
 }
 
-func (sc *serverConn) writeHeaderInLoop(v interface{}) error {
+func (sc *serverConn) writeHeadersFrame(v interface{}) error {
 	sc.writeG.check()
 	req := v.(headerWriteReq)
 
@@ -866,7 +876,7 @@
 	})
 }
 
-func (sc *serverConn) writeDataInLoop(v interface{}) error {
+func (sc *serverConn) writeDataFrame(v interface{}) error {
 	sc.writeG.check()
 	rws := v.(*responseWriterState)
 	return sc.framer.WriteData(rws.streamID, rws.curChunkIsFinal, rws.curChunk)
@@ -1014,7 +1024,7 @@
 		if rws.snapHeader.Get("Content-Type") == "" {
 			ctype = http.DetectContentType(p)
 		}
-		rws.sc.writeHeader(headerWriteReq{
+		rws.sc.writeHeaders(headerWriteReq{
 			streamID:      rws.streamID,
 			httpResCode:   rws.status,
 			h:             rws.snapHeader,
@@ -1033,7 +1043,7 @@
 	rws.sc.wantWriteFrameCh <- frameWriteMsg{
 		cost:     uint32(len(p)),
 		streamID: rws.streamID,
-		write:    (*serverConn).writeDataInLoop,
+		write:    (*serverConn).writeDataFrame,
 		done:     rws.chunkWrittenCh,
 		v:        rws, // writeDataInLoop uses only rws.curChunk and rws.curChunkIsFinal
 	}