core/corehttp: Close DAGReaders when done
Matt Bell committed
Jan 27, 2015 at 00:36 UTC
950e492fc4a0ce4cfbb279d6930036e38b90b7da
1 file changed
+4
-2
core/corehttp/gateway_handler.go
+4
-2
@@ -24,7 +24,7 @@ type gateway interface {
24
ResolvePath(string) (*dag.Node, error)
25
NewDagFromReader(io.Reader) (*dag.Node, error)
26
AddNodeToDAG(nd *dag.Node) (u.Key, error)
27
- NewDagReader(nd *dag.Node) (io.ReadSeeker, error)
27
+ NewDagReader(nd *dag.Node) (uio.ReadSeekCloser, error)
28
}
29
30
// shortcut for templating
@@ -96,7 +96,7 @@ func (i *gatewayHandler) AddNodeToDAG(nd *dag.Node) (u.Key, error) {
96
return i.node.DAG.Add(nd)
97
}
98
99
-func (i *gatewayHandler) NewDagReader(nd *dag.Node) (io.ReadSeeker, error) {
99
+func (i *gatewayHandler) NewDagReader(nd *dag.Node) (uio.ReadSeekCloser, error) {
100
return uio.NewDagReader(i.node.Context(), nd, i.node.DAG)
101
}
102
@@ -125,6 +125,7 @@ func (i *gatewayHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
125
126
dr, err := i.NewDagReader(nd)
127
if err == nil {
128
+ defer dr.Close()
129
_, name := path.Split(urlPath)
130
// set modtime to a really long time ago, since files are immutable and should stay cached
131
modtime := time.Unix(1, 0)
@@ -162,6 +163,7 @@ func (i *gatewayHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
163
internalWebError(w, err)
164
return
165
}
166
+ defer dr.Close()
167
// write to request
168
io.Copy(w, dr)
169
break