mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 06:14:49 +02:00
6822370: ReentrantReadWriteLock: threads hung when there are no threads holding onto the lock (Netra x4450)
This day one bug is caused by missing memory barriers in various Parker::park() paths that can result in lost wakeups and hangs. Reviewed-by: dice, acorn
This commit is contained in:
parent
b409d16477
commit
10232cb341
2 changed files with 6 additions and 0 deletions
|
@ -4683,6 +4683,7 @@ void Parker::park(bool isAbsolute, jlong time) {
|
|||
// Return immediately if a permit is available.
|
||||
if (_counter > 0) {
|
||||
_counter = 0 ;
|
||||
OrderAccess::fence();
|
||||
return ;
|
||||
}
|
||||
|
||||
|
@ -4725,6 +4726,7 @@ void Parker::park(bool isAbsolute, jlong time) {
|
|||
_counter = 0;
|
||||
status = pthread_mutex_unlock(_mutex);
|
||||
assert (status == 0, "invariant") ;
|
||||
OrderAccess::fence();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -4765,6 +4767,7 @@ void Parker::park(bool isAbsolute, jlong time) {
|
|||
jt->java_suspend_self();
|
||||
}
|
||||
|
||||
OrderAccess::fence();
|
||||
}
|
||||
|
||||
void Parker::unpark() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue