RFR(oneliner): 8205006: Assertion failure when rehashing stringtable
Robbin Ehn
robbin.ehn at oracle.com
Tue Jun 19 11:43:44 UTC 2018
Hi all, please review.
When grow completes it poisons the _new_table to make sure no-one uses it after
the table swap. Rehash and grow are mutual exclusive, so the assert tries to
verify that it's ok to rehash. Thus in this case NULL and POISON_PTR are
equivalent.
Reproduced with first forcing table to grow then rehash, with below that works.
Thanks, Robbin
[rehn at rehn-ws open]$ hg diff
diff -r 9fdfe5ca0e5e src/hotspot/share/utilities/concurrentHashTable.inline.hpp
--- a/src/hotspot/share/utilities/concurrentHashTable.inline.hpp Tue Jun 19
10:57:13 2018 +0200
+++ b/src/hotspot/share/utilities/concurrentHashTable.inline.hpp Tue Jun 19
12:39:17 2018 +0200
@@ -1203,7 +1203,7 @@
if (!try_resize_lock(thread)) {
return false;
}
- assert(_new_table == NULL, "Must be NULL");
+ assert(_new_table == NULL || _new_table == POISON_PTR, "Must be NULL");
for (size_t bucket_it = 0; bucket_it < _table->_size; bucket_it++) {
Bucket* bucket = _table->get_bucket(bucket_it);
assert(!bucket->have_redirect() && !bucket->is_locked(), "Table must be
uncontended");
More information about the hotspot-runtime-dev
mailing list