Fix Locking
This commit is contained in:
@@ -43,7 +43,6 @@ type fuzzyResult struct {
|
||||
type resultBuffer struct {
|
||||
createdAt time.Time
|
||||
hits int
|
||||
mu sync.Mutex
|
||||
results []fuzzyResult
|
||||
}
|
||||
|
||||
@@ -56,6 +55,7 @@ var (
|
||||
|
||||
var searchTargets map[table.TechnicalName][]string = make(map[table.TechnicalName][]string)
|
||||
var resultsBuffer map[string]*resultBuffer = make(map[string]*resultBuffer)
|
||||
var resultsBufferMu sync.Mutex
|
||||
|
||||
func Load() error {
|
||||
keywords, err := model.GetKeywordsModel()
|
||||
@@ -95,6 +95,9 @@ func GetPage(r *http.Request) int {
|
||||
}
|
||||
|
||||
func GetBuffer(searchTerm string) (*resultBuffer, error) {
|
||||
resultsBufferMu.Lock()
|
||||
defer resultsBufferMu.Unlock()
|
||||
|
||||
buffer, exists := resultsBuffer[searchTerm]
|
||||
|
||||
if !exists {
|
||||
@@ -186,11 +189,13 @@ func BuildBuffer(searchTerm string) error {
|
||||
return 0
|
||||
})
|
||||
|
||||
resultsBufferMu.Lock()
|
||||
resultsBuffer[searchTerm] = &resultBuffer{
|
||||
createdAt: time.Now(),
|
||||
hits: hits,
|
||||
results: fuzzyResults,
|
||||
}
|
||||
resultsBufferMu.Unlock()
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -212,9 +217,6 @@ func GetPages(buffer *resultBuffer, p int) (int, int) {
|
||||
}
|
||||
|
||||
func Search(buffer *resultBuffer, page int, maxPage int) *model.ResultsModel {
|
||||
buffer.mu.Lock()
|
||||
defer buffer.mu.Unlock()
|
||||
|
||||
resultsModel := model.NewResultsModel()
|
||||
for i := page * pageStep; i < page*pageStep+pageStep; i++ {
|
||||
if i > len(buffer.results)-1 {
|
||||
@@ -295,11 +297,12 @@ func Search(buffer *resultBuffer, page int, maxPage int) *model.ResultsModel {
|
||||
}
|
||||
*/
|
||||
func ClearOldBuffers() {
|
||||
resultsBufferMu.Lock()
|
||||
defer resultsBufferMu.Unlock()
|
||||
|
||||
for key, buffer := range resultsBuffer {
|
||||
if time.Since(buffer.createdAt) >= time.Minute*10 {
|
||||
buffer.mu.Lock()
|
||||
delete(resultsBuffer, key)
|
||||
buffer.mu.Unlock()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user