Commit 689fae2d authored by Gergely Brautigam's avatar Gergely Brautigam Committed by Michael Knyszek

runtime: node ordering in mTreap; adjust code to reflect description.

Adjust mTreap ordering logic to reflect the description of mTreap ordering.
Before it was using unsafe.Pointer in order to gather the base address of
a span. This has been changed to use base, which is the startAddress of a
span as the description is telling us in mgclarge.go.

Fixes: golang/go#28805

Change-Id: Ib3cd94a0757e23d135b5d41830f38fc08bcf16a3
GitHub-Last-Rev: 93f749b6700b1e179de16607a18395d5e162ecc1
GitHub-Pull-Request: golang/go#28973
Reviewed-on: https://go-review.googlesource.com/c/151499Reviewed-by: 's avatarMichael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
parent ec4de31c
...@@ -164,10 +164,10 @@ func (root *mTreap) insert(span *mspan) { ...@@ -164,10 +164,10 @@ func (root *mTreap) insert(span *mspan) {
pt = &t.right pt = &t.right
} else if t.npagesKey > npages { } else if t.npagesKey > npages {
pt = &t.left pt = &t.left
} else if uintptr(unsafe.Pointer(t.spanKey)) < uintptr(unsafe.Pointer(span)) { } else if t.spanKey.base() < span.base() {
// t.npagesKey == npages, so sort on span addresses. // t.npagesKey == npages, so sort on span addresses.
pt = &t.right pt = &t.right
} else if uintptr(unsafe.Pointer(t.spanKey)) > uintptr(unsafe.Pointer(span)) { } else if t.spanKey.base() > span.base() {
pt = &t.left pt = &t.left
} else { } else {
throw("inserting span already in treap") throw("inserting span already in treap")
...@@ -271,9 +271,9 @@ func (root *mTreap) removeSpan(span *mspan) { ...@@ -271,9 +271,9 @@ func (root *mTreap) removeSpan(span *mspan) {
t = t.right t = t.right
} else if t.npagesKey > npages { } else if t.npagesKey > npages {
t = t.left t = t.left
} else if uintptr(unsafe.Pointer(t.spanKey)) < uintptr(unsafe.Pointer(span)) { } else if t.spanKey.base() < span.base() {
t = t.right t = t.right
} else if uintptr(unsafe.Pointer(t.spanKey)) > uintptr(unsafe.Pointer(span)) { } else if t.spanKey.base() > span.base() {
t = t.left t = t.left
} }
} }
......
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