From: Austin Clements Date: Thu, 13 Aug 2015 03:39:10 +0000 (-0400) Subject: runtime: fix hashing of trace stacks X-Git-Tag: go1.6beta1~1090 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=739f13383791847fd4b0a1eab7e333b5780be039;p=gostls13.git runtime: fix hashing of trace stacks The call to hash the trace stack reversed the "seed" and "size" arguments to memhash and, hence, always called memhash with a 0 size, which dutifully returned a hash value that depended only on the number of PCs in the stack and not their values. As a result, all stacks were put in to a very subset of the 8,192 buckets. Fix this by passing these arguments in the correct order. Change-Id: I67cd29312f5615c7ffa23e205008dd72c6b8af62 Reviewed-on: https://go-review.googlesource.com/13613 Reviewed-by: Dmitry Vyukov --- diff --git a/src/runtime/trace.go b/src/runtime/trace.go index c81846221a..29600b5c4d 100644 --- a/src/runtime/trace.go +++ b/src/runtime/trace.go @@ -624,7 +624,7 @@ func (tab *traceStackTable) put(pcs []uintptr) uint32 { if len(pcs) == 0 { return 0 } - hash := memhash(unsafe.Pointer(&pcs[0]), uintptr(len(pcs))*unsafe.Sizeof(pcs[0]), 0) + hash := memhash(unsafe.Pointer(&pcs[0]), 0, uintptr(len(pcs))*unsafe.Sizeof(pcs[0])) // First, search the hashtable w/o the mutex. if id := tab.find(pcs, hash); id != 0 { return id