Commit 90e9669c authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

undo CL 44150043 / 198bdc0984dd

See https://golang.org/cl/44150043/

««« original CL description
regexp: use sync.Pool

For machines, not threads.

Update #4720

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/44150043
»»»

TBR=golang-dev
CC=golang-codereviews
https://golang.org/cl/48190043
parent 02a15e71
...@@ -85,8 +85,9 @@ type Regexp struct { ...@@ -85,8 +85,9 @@ type Regexp struct {
subexpNames []string subexpNames []string
longest bool longest bool
// pool of machines for running regexp // cache of machines for running regexp
machinePool sync.Pool // of *machine mu sync.Mutex
machine []*machine
} }
// String returns the source text used to compile the regular expression. // String returns the source text used to compile the regular expression.
...@@ -174,9 +175,14 @@ func compile(expr string, mode syntax.Flags, longest bool) (*Regexp, error) { ...@@ -174,9 +175,14 @@ func compile(expr string, mode syntax.Flags, longest bool) (*Regexp, error) {
// It uses the re's machine cache if possible, to avoid // It uses the re's machine cache if possible, to avoid
// unnecessary allocation. // unnecessary allocation.
func (re *Regexp) get() *machine { func (re *Regexp) get() *machine {
if v := re.machinePool.Get(); v != nil { re.mu.Lock()
return v.(*machine) if n := len(re.machine); n > 0 {
z := re.machine[n-1]
re.machine = re.machine[:n-1]
re.mu.Unlock()
return z
} }
re.mu.Unlock()
z := progMachine(re.prog) z := progMachine(re.prog)
z.re = re z.re = re
return z return z
...@@ -187,7 +193,9 @@ func (re *Regexp) get() *machine { ...@@ -187,7 +193,9 @@ func (re *Regexp) get() *machine {
// grow to the maximum number of simultaneous matches // grow to the maximum number of simultaneous matches
// run using re. (The cache empties when re gets garbage collected.) // run using re. (The cache empties when re gets garbage collected.)
func (re *Regexp) put(z *machine) { func (re *Regexp) put(z *machine) {
re.machinePool.Put(z) re.mu.Lock()
re.machine = append(re.machine, z)
re.mu.Unlock()
} }
// MustCompile is like Compile but panics if the expression cannot be parsed. // MustCompile is like Compile but panics if the expression cannot be parsed.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment