aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/net/http/fcgi/child.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/net/http/fcgi/child.go')
-rw-r--r--libgo/go/net/http/fcgi/child.go20
1 files changed, 5 insertions, 15 deletions
diff --git a/libgo/go/net/http/fcgi/child.go b/libgo/go/net/http/fcgi/child.go
index 756722b..dc82bf7 100644
--- a/libgo/go/net/http/fcgi/child.go
+++ b/libgo/go/net/http/fcgi/child.go
@@ -16,7 +16,6 @@ import (
"net/http/cgi"
"os"
"strings"
- "sync"
"time"
)
@@ -154,7 +153,6 @@ type child struct {
conn *conn
handler http.Handler
- mu sync.Mutex // protects requests:
requests map[uint16]*request // keyed by request ID
}
@@ -193,9 +191,7 @@ var ErrRequestAborted = errors.New("fcgi: request aborted by web server")
var ErrConnClosed = errors.New("fcgi: connection to web server closed")
func (c *child) handleRecord(rec *record) error {
- c.mu.Lock()
req, ok := c.requests[rec.h.Id]
- c.mu.Unlock()
if !ok && rec.h.Type != typeBeginRequest && rec.h.Type != typeGetValues {
// The spec says to ignore unknown request IDs.
return nil
@@ -218,9 +214,7 @@ func (c *child) handleRecord(rec *record) error {
return nil
}
req = newRequest(rec.h.Id, br.flags)
- c.mu.Lock()
c.requests[rec.h.Id] = req
- c.mu.Unlock()
return nil
case typeParams:
// NOTE(eds): Technically a key-value pair can straddle the boundary
@@ -248,8 +242,11 @@ func (c *child) handleRecord(rec *record) error {
// TODO(eds): This blocks until the handler reads from the pipe.
// If the handler takes a long time, it might be a problem.
req.pw.Write(content)
- } else if req.pw != nil {
- req.pw.Close()
+ } else {
+ delete(c.requests, req.reqId)
+ if req.pw != nil {
+ req.pw.Close()
+ }
}
return nil
case typeGetValues:
@@ -260,9 +257,7 @@ func (c *child) handleRecord(rec *record) error {
// If the filter role is implemented, read the data stream here.
return nil
case typeAbortRequest:
- c.mu.Lock()
delete(c.requests, rec.h.Id)
- c.mu.Unlock()
c.conn.writeEndRequest(rec.h.Id, 0, statusRequestComplete)
if req.pw != nil {
req.pw.CloseWithError(ErrRequestAborted)
@@ -309,9 +304,6 @@ func (c *child) serveRequest(req *request, body io.ReadCloser) {
// Make sure we serve something even if nothing was written to r
r.Write(nil)
r.Close()
- c.mu.Lock()
- delete(c.requests, req.reqId)
- c.mu.Unlock()
c.conn.writeEndRequest(req.reqId, 0, statusRequestComplete)
// Consume the entire body, so the host isn't still writing to
@@ -330,8 +322,6 @@ func (c *child) serveRequest(req *request, body io.ReadCloser) {
}
func (c *child) cleanUp() {
- c.mu.Lock()
- defer c.mu.Unlock()
for _, req := range c.requests {
if req.pw != nil {
// race with call to Close in c.serveRequest doesn't matter because