mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 13:00:54 +00:00
gmfim add lock. fix #445
This commit is contained in:
parent
338124e3fb
commit
6f3a759ba5
@ -5,16 +5,17 @@ import (
|
|||||||
"compress/flate"
|
"compress/flate"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"errors"
|
"errors"
|
||||||
//"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var gmfim map[string]*MemFileInfo = make(map[string]*MemFileInfo)
|
var gmfim map[string]*MemFileInfo = make(map[string]*MemFileInfo)
|
||||||
|
var lock sync.RWMutex
|
||||||
|
|
||||||
// OpenMemZipFile returns MemFile object with a compressed static file.
|
// OpenMemZipFile returns MemFile object with a compressed static file.
|
||||||
// it's used for serve static file if gzip enable.
|
// it's used for serve static file if gzip enable.
|
||||||
@ -32,12 +33,12 @@ func OpenMemZipFile(path string, zip string) (*MemFile, error) {
|
|||||||
|
|
||||||
modtime := osfileinfo.ModTime()
|
modtime := osfileinfo.ModTime()
|
||||||
fileSize := osfileinfo.Size()
|
fileSize := osfileinfo.Size()
|
||||||
|
lock.RLock()
|
||||||
cfi, ok := gmfim[zip+":"+path]
|
cfi, ok := gmfim[zip+":"+path]
|
||||||
|
lock.RUnlock()
|
||||||
if ok && cfi.ModTime() == modtime && cfi.fileSize == fileSize {
|
if ok && cfi.ModTime() == modtime && cfi.fileSize == fileSize {
|
||||||
//fmt.Printf("read %s file %s from cache\n", zip, path)
|
|
||||||
} else {
|
} else {
|
||||||
//fmt.Printf("NOT read %s file %s from cache\n", zip, path)
|
|
||||||
var content []byte
|
var content []byte
|
||||||
if zip == "gzip" {
|
if zip == "gzip" {
|
||||||
//将文件内容压缩到zipbuf中
|
//将文件内容压缩到zipbuf中
|
||||||
@ -81,8 +82,9 @@ func OpenMemZipFile(path string, zip string) (*MemFile, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cfi = &MemFileInfo{osfileinfo, modtime, content, int64(len(content)), fileSize}
|
cfi = &MemFileInfo{osfileinfo, modtime, content, int64(len(content)), fileSize}
|
||||||
|
lock.Lock()
|
||||||
|
defer lock.Unlock()
|
||||||
gmfim[zip+":"+path] = cfi
|
gmfim[zip+":"+path] = cfi
|
||||||
//fmt.Printf("%s file %s to %d, cache it\n", zip, path, len(content))
|
|
||||||
}
|
}
|
||||||
return &MemFile{fi: cfi, offset: 0}, nil
|
return &MemFile{fi: cfi, offset: 0}, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user