Julian Brost avatar Julian Brost committed 95698f0

Lock the theme object while something is accessing the cache map.

Comments (0)

Files changed (1)

 import (
+	"path"
-	"path"
+	"sync"
 type Theme struct {
 	path  string
 	cache map[string]string
+	lock  sync.RWMutex
 func NewTheme(path string) (*Theme, error) {
 func (theme *Theme) GetTemplate(name string) (string, error) {
+	theme.lock.RLock()
 	template, found := theme.cache[name]
+	theme.lock.RUnlock()
 	if found {
 		return template, nil
 		return "", err
 	template = string(rawTemplate)
+	theme.lock.Lock()
 	theme.cache[name] = template
+	theme.lock.Unlock()
 	return template, nil
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.