Close FileReaders. Hunting an fd leak, but this isn't it,

since FileReader.Close is back to doing nothing.

Change-Id: I65e906d75cf2825b9476ed5008ce042f44582113
This commit is contained in:
Brad Fitzpatrick 2012-12-31 18:02:13 -08:00
parent 4ce1263225
commit 898e522126
3 changed files with 10 additions and 3 deletions

View File

@ -120,6 +120,7 @@ func (ix *Index) populateFile(blobRef *blobref.BlobRef, ss *schema.Superset, bm
log.Printf("index: error indexing file, creating NewFileReader %s: %v", blobRef, err) log.Printf("index: error indexing file, creating NewFileReader %s: %v", blobRef, err)
return nil return nil
} }
defer fr.Close()
mime, reader := magic.MimeTypeFromReader(fr) mime, reader := magic.MimeTypeFromReader(fr)
sha1 := sha1.New() sha1 := sha1.New()

View File

@ -155,6 +155,8 @@ type FileReader struct {
// NewFileReader returns a new FileReader reading the contents of fileBlobRef, // NewFileReader returns a new FileReader reading the contents of fileBlobRef,
// fetching blobs from fetcher. The fileBlobRef must be of a "bytes" or "file" // fetching blobs from fetcher. The fileBlobRef must be of a "bytes" or "file"
// schema blob. // schema blob.
//
// The caller should call Close on the FileReader when done reading.
func NewFileReader(fetcher blobref.SeekFetcher, fileBlobRef *blobref.BlobRef) (*FileReader, error) { func NewFileReader(fetcher blobref.SeekFetcher, fileBlobRef *blobref.BlobRef) (*FileReader, error) {
// TODO(bradfitz): make this take a blobref.FetcherAt instead? // TODO(bradfitz): make this take a blobref.FetcherAt instead?
// TODO(bradfitz): rename this into bytes reader? but for now it's still // TODO(bradfitz): rename this into bytes reader? but for now it's still

View File

@ -96,14 +96,16 @@ func (ih *ImageHandler) cacheScaled(tr io.Reader, name string) error {
return nil return nil
} }
func (ih *ImageHandler) cached(br *blobref.BlobRef) (fr *schema.FileReader, err error) { // cached returns a FileReader for the given file schema blobref.
// The FileReader should be closed when done reading.
func (ih *ImageHandler) cached(fileRef *blobref.BlobRef) (*schema.FileReader, error) {
fetchSeeker := blobref.SeekerFromStreamingFetcher(ih.Cache) fetchSeeker := blobref.SeekerFromStreamingFetcher(ih.Cache)
fr, err = schema.NewFileReader(fetchSeeker, br) fr, err := schema.NewFileReader(fetchSeeker, fileRef)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if imageDebug { if imageDebug {
log.Printf("Image Cache: hit: %v\n", br) log.Printf("Image Cache: hit: %v\n", fileRef)
} }
return fr, nil return fr, nil
} }
@ -126,6 +128,7 @@ func (ih *ImageHandler) scaledCached(buf *bytes.Buffer, file *blobref.BlobRef) (
if err != nil { if err != nil {
return format, fmt.Errorf("No cache hit for %v: %v", br, err) return format, fmt.Errorf("No cache hit for %v: %v", br, err)
} }
defer fr.Close()
_, err = io.Copy(buf, fr) _, err = io.Copy(buf, fr)
if err != nil { if err != nil {
return format, fmt.Errorf("error reading cached thumbnail %v: %v", name, err) return format, fmt.Errorf("error reading cached thumbnail %v: %v", name, err)
@ -151,6 +154,7 @@ func (ih *ImageHandler) scaleImage(buf *bytes.Buffer, file *blobref.BlobRef) (fo
if err != nil { if err != nil {
return format, err return format, err
} }
defer fr.Close()
_, err = io.Copy(buf, fr) _, err = io.Copy(buf, fr)
if err != nil { if err != nil {