diff options
| author | Russ Cox <rsc@golang.org> | 2015-02-04 11:56:34 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2015-02-04 17:04:08 +0000 |
| commit | 7505cd8b23eaa521d9bcba0660c5430d1c09e647 (patch) | |
| tree | 1dd08b3c105f2b34de04dc83816addf907ee03da /src/runtime/panic.go | |
| parent | 1f2d7bf44fd20d06c21d16df485fa17137fe79f6 (diff) | |
| download | go-7505cd8b23eaa521d9bcba0660c5430d1c09e647.tar.xz | |
Revert "runtime: bound defer pools"
This reverts commit 805907115352801a54f987fc9079251b478cce3f.
Conflicts:
src/runtime/proc1.go (resolved by hand)
Change-Id: Ic62e3e802f0007ff9012b37bc5fd41fcafc153d0
Reviewed-on: https://go-review.googlesource.com/3885
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Diffstat (limited to 'src/runtime/panic.go')
| -rw-r--r-- | src/runtime/panic.go | 40 |
1 files changed, 5 insertions, 35 deletions
diff --git a/src/runtime/panic.go b/src/runtime/panic.go index c8cfd9f0c8..e2a5c629da 100644 --- a/src/runtime/panic.go +++ b/src/runtime/panic.go @@ -166,20 +166,9 @@ func newdefer(siz int32) *_defer { mp := acquirem() if sc < uintptr(len(p{}.deferpool)) { pp := mp.p - if len(pp.deferpool[sc]) == 0 { - lock(&sched.deferlock) - for len(pp.deferpool[sc]) < cap(pp.deferpool[sc])/2 && sched.deferpool[sc] != nil { - d := sched.deferpool[sc] - sched.deferpool[sc] = d.link - d.link = nil - pp.deferpool[sc] = append(pp.deferpool[sc], d) - } - unlock(&sched.deferlock) - } - if ln := len(pp.deferpool[sc]); ln > 0 { - d = pp.deferpool[sc][ln-1] - pp.deferpool[sc][ln-1] = nil - pp.deferpool[sc] = pp.deferpool[sc][:ln-1] + d = pp.deferpool[sc] + if d != nil { + pp.deferpool[sc] = d.link } } if d == nil { @@ -225,28 +214,9 @@ func freedefer(d *_defer) { if sc < uintptr(len(p{}.deferpool)) { mp := acquirem() pp := mp.p - if len(pp.deferpool[sc]) == cap(pp.deferpool[sc]) { - // Transfer half of local cache to the central cache. - var first, last *_defer - for len(pp.deferpool[sc]) > cap(pp.deferpool[sc])/2 { - ln := len(pp.deferpool[sc]) - d := pp.deferpool[sc][ln-1] - pp.deferpool[sc][ln-1] = nil - pp.deferpool[sc] = pp.deferpool[sc][:ln-1] - if first == nil { - first = d - } else { - last.link = d - } - last = d - } - lock(&sched.deferlock) - last.link = sched.deferpool[sc] - sched.deferpool[sc] = first - unlock(&sched.deferlock) - } *d = _defer{} - pp.deferpool[sc] = append(pp.deferpool[sc], d) + d.link = pp.deferpool[sc] + pp.deferpool[sc] = d releasem(mp) } } |
