summaryrefslogtreecommitdiff
path: root/src/library/scala/collection
diff options
context:
space:
mode:
authorCarsten Varming <cvarming@twitter.com>2016-07-20 23:57:35 -0400
committerAdriaan Moors <adriaan@lightbend.com>2017-01-05 13:27:04 -0800
commitf31745ac9bc5d2fcad1ab52caf4a3b6169c7f9b4 (patch)
tree36e5ca19594e75207e6a991ab677fc993c32b651 /src/library/scala/collection
parentcb7192c79f35e8b4c852f6859c9ef0cece173a36 (diff)
downloadscala-f31745ac9bc5d2fcad1ab52caf4a3b6169c7f9b4.tar.gz
scala-f31745ac9bc5d2fcad1ab52caf4a3b6169c7f9b4.tar.bz2
scala-f31745ac9bc5d2fcad1ab52caf4a3b6169c7f9b4.zip
SI-8774 Null link fields in mutable hash maps on removal.
(cherry picked from commit 9a2486087a9739108265e7830ebaa96373605d02)
Diffstat (limited to 'src/library/scala/collection')
-rw-r--r--src/library/scala/collection/mutable/HashTable.scala5
-rw-r--r--src/library/scala/collection/mutable/LinkedHashMap.scala2
-rw-r--r--src/library/scala/collection/mutable/LinkedHashSet.scala2
3 files changed, 8 insertions, 1 deletions
diff --git a/src/library/scala/collection/mutable/HashTable.scala b/src/library/scala/collection/mutable/HashTable.scala
index b48a32fa37..bb15788bdf 100644
--- a/src/library/scala/collection/mutable/HashTable.scala
+++ b/src/library/scala/collection/mutable/HashTable.scala
@@ -183,6 +183,7 @@ trait HashTable[A, Entry >: Null <: HashEntry[A, Entry]] extends HashTable.HashU
table(h) = e.next
tableSize = tableSize - 1
nnSizeMapRemove(h)
+ e.next = null
return e
} else {
var e1 = e.next
@@ -194,6 +195,7 @@ trait HashTable[A, Entry >: Null <: HashEntry[A, Entry]] extends HashTable.HashU
e.next = e1.next
tableSize = tableSize - 1
nnSizeMapRemove(h)
+ e1.next = null
return e1
}
}
@@ -227,8 +229,9 @@ trait HashTable[A, Entry >: Null <: HashEntry[A, Entry]] extends HashTable.HashU
var es = iterTable(idx)
while (es != null) {
+ val next = es.next // Cache next in case f removes es.
f(es.asInstanceOf[Entry])
- es = es.next
+ es = next
while (es == null && idx > 0) {
idx -= 1
diff --git a/src/library/scala/collection/mutable/LinkedHashMap.scala b/src/library/scala/collection/mutable/LinkedHashMap.scala
index 275f490675..a731b1bbdc 100644
--- a/src/library/scala/collection/mutable/LinkedHashMap.scala
+++ b/src/library/scala/collection/mutable/LinkedHashMap.scala
@@ -81,6 +81,8 @@ class LinkedHashMap[A, B] extends AbstractMap[A, B]
else e.earlier.later = e.later
if (e.later eq null) lastEntry = e.earlier
else e.later.earlier = e.earlier
+ e.earlier = null // Null references to prevent nepotism
+ e.later = null
Some(e.value)
}
}
diff --git a/src/library/scala/collection/mutable/LinkedHashSet.scala b/src/library/scala/collection/mutable/LinkedHashSet.scala
index 756a2f73c1..f00cbd90dc 100644
--- a/src/library/scala/collection/mutable/LinkedHashSet.scala
+++ b/src/library/scala/collection/mutable/LinkedHashSet.scala
@@ -73,6 +73,8 @@ class LinkedHashSet[A] extends AbstractSet[A]
else e.earlier.later = e.later
if (e.later eq null) lastEntry = e.earlier
else e.later.earlier = e.earlier
+ e.earlier = null // Null references to prevent nepotism
+ e.later = null
true
}
}