提交 a0598de6 编写于 作者: C coleenp

6704010: Internal Error (src/share/vm/interpreter/interpreterRuntime.cpp:1106)

Summary: Fixed a race condition in the assertion caused by an unguarded, concurrent access to a GrowableArray object.
Reviewed-by: coleenp, dholmes, dsamersoff
Contributed-by: volker.simonis@gmail.com
上级 1bd5586f
......@@ -1193,9 +1193,20 @@ void SignatureHandlerLibrary::add(methodHandle method) {
method->set_signature_handler(_handlers->at(handler_index));
}
}
#ifdef ASSERT
int handler_index, fingerprint_index;
{
// '_handlers' and '_fingerprints' are 'GrowableArray's and are NOT synchronized
// in any way if accessed from multiple threads. To avoid races with another
// thread which may change the arrays in the above, mutex protected block, we
// have to protect this read access here with the same mutex as well!
MutexLocker mu(SignatureHandlerLibrary_lock);
handler_index = _handlers->find(method->signature_handler());
fingerprint_index = _fingerprints->find(Fingerprinter(method).fingerprint());
}
assert(method->signature_handler() == Interpreter::slow_signature_handler() ||
_handlers->find(method->signature_handler()) == _fingerprints->find(Fingerprinter(method).fingerprint()),
"sanity check");
handler_index == fingerprint_index, "sanity check");
#endif
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册