aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/panic.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2015-02-04 11:56:34 -0500
committerRuss Cox <rsc@golang.org>2015-02-04 17:04:08 +0000
commit7505cd8b23eaa521d9bcba0660c5430d1c09e647 (patch)
tree1dd08b3c105f2b34de04dc83816addf907ee03da /src/runtime/panic.go
parent1f2d7bf44fd20d06c21d16df485fa17137fe79f6 (diff)
downloadgo-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.go40
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)
}
}