aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2011-06-02 11:07:41 -0700
committerRobert Griesemer <gri@golang.org>2011-06-02 11:07:41 -0700
commit191a6bfc5e99911f905cb582b676b5502c7b5aad (patch)
tree0511534df9cbcc5bfe5d8e44c6a0c75674e20c2e
parent4d15577783aaf5d6c3b53850d44b38b1bef305bc (diff)
downloadgo-191a6bfc5e99911f905cb582b676b5502c7b5aad.tar.gz
go-191a6bfc5e99911f905cb582b676b5502c7b5aad.zip
big: do not modify divisor
Fixes #1907. R=rsc CC=golang-dev https://golang.org/cl/4527096
-rwxr-xr-xsrc/pkg/big/nat.go8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/pkg/big/nat.go b/src/pkg/big/nat.go
index 4f17e3690c..db02a43c2e 100755
--- a/src/pkg/big/nat.go
+++ b/src/pkg/big/nat.go
@@ -551,7 +551,12 @@ func (z nat) divLarge(u, uIn, v nat) (q, r nat) {
// D1.
shift := Word(leadingZeros(v[n-1]))
- shlVW(v, v, shift)
+ if shift > 0 {
+ // do not modify v, it may be used by another goroutine simultaneously
+ v1 := make(nat, n)
+ shlVW(v1, v, shift)
+ v = v1
+ }
u[len(uIn)] = shlVW(u[0:len(uIn)], uIn, shift)
// D2.
@@ -592,7 +597,6 @@ func (z nat) divLarge(u, uIn, v nat) (q, r nat) {
q = q.norm()
shrVW(u, u, shift)
- shrVW(v, v, shift)
r = u.norm()
return q, r