fix concurrent map write panic when init
This commit is contained in:
parent
f0984319b4
commit
c0326ecfab
|
@ -19,6 +19,7 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
@ -193,6 +194,7 @@ var (
|
||||||
layoutDowOfSpecificWeek = `^(%value%)#([1-5])$`
|
layoutDowOfSpecificWeek = `^(%value%)#([1-5])$`
|
||||||
fieldFinder = regexp.MustCompile(`\S+`)
|
fieldFinder = regexp.MustCompile(`\S+`)
|
||||||
entryFinder = regexp.MustCompile(`[^,]+`)
|
entryFinder = regexp.MustCompile(`[^,]+`)
|
||||||
|
layoutRegexpLock = sync.Mutex{}
|
||||||
layoutRegexp = make(map[string]*regexp.Regexp)
|
layoutRegexp = make(map[string]*regexp.Regexp)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -481,9 +483,15 @@ func genericFieldParse(s string, desc fieldDescriptor) ([]*cronDirective, error)
|
||||||
func makeLayoutRegexp(layout, value string) *regexp.Regexp {
|
func makeLayoutRegexp(layout, value string) *regexp.Regexp {
|
||||||
layout = strings.Replace(layout, `%value%`, value, -1)
|
layout = strings.Replace(layout, `%value%`, value, -1)
|
||||||
re := layoutRegexp[layout]
|
re := layoutRegexp[layout]
|
||||||
|
if re == nil {
|
||||||
|
// double check locking to fix issue: https://github.com/gorhill/cronexpr/issues/19
|
||||||
|
layoutRegexpLock.Lock()
|
||||||
|
defer layoutRegexpLock.Unlock()
|
||||||
|
re = layoutRegexp[layout]
|
||||||
if re == nil {
|
if re == nil {
|
||||||
re = regexp.MustCompile(layout)
|
re = regexp.MustCompile(layout)
|
||||||
layoutRegexp[layout] = re
|
layoutRegexp[layout] = re
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return re
|
return re
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue