Fix Locking

This commit is contained in:
2025-05-23 19:48:22 +02:00
parent f8ab5c8358
commit 3e07e2f06e
6 changed files with 77 additions and 59 deletions

View File

@@ -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()
}
}
}