fix concurrent map write panic when init
This commit is contained in:
parent
f0984319b4
commit
c0326ecfab
|
@ -19,6 +19,7 @@ import (
|
|||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -193,6 +194,7 @@ var (
|
|||
layoutDowOfSpecificWeek = `^(%value%)#([1-5])$`
|
||||
fieldFinder = regexp.MustCompile(`\S+`)
|
||||
entryFinder = regexp.MustCompile(`[^,]+`)
|
||||
layoutRegexpLock = sync.Mutex{}
|
||||
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 {
|
||||
layout = strings.Replace(layout, `%value%`, value, -1)
|
||||
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 {
|
||||
re = regexp.MustCompile(layout)
|
||||
layoutRegexp[layout] = re
|
||||
}
|
||||
}
|
||||
return re
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue