RFR: 8145725: Remove the WorkAroundNPTLTimedWaitHang workaround
Dmitry Dmitriev
dmitry.dmitriev at oracle.com
Mon Feb 8 13:24:15 UTC 2016
Hello David,
Looks good to me. Just few additional clean-ups which you can consider
for implementing.
1) hotspot/src/os/bsd/vm/os_bsd.cpp module
I think that you can remove duplicated logic for mutex unlock from
Parker::unpark function.
I.e. transform it from:
4376 void Parker::unpark() {
...
4381 if (s < 1) {
4382 status = pthread_mutex_unlock(_mutex);
4383 assert_status(status == 0, status, "invariant");
4384 status = pthread_cond_signal(_cond);
4385 assert_status(status == 0, status, "invariant");
4386 } else {
4387 pthread_mutex_unlock(_mutex);
4388 assert_status(status == 0, status, "invariant");
4389 }
4390 }
To something like that:
void Parker::unpark() {
...
status = pthread_mutex_unlock(_mutex);
assert_status(status == 0, status, "invariant");
if (s < 1) {
status = pthread_cond_signal(_cond);
assert_status(status == 0, status, "invariant");
}
}
2) hotspot/src/os/linux/vm/os_linux.cpp
Similar refactoring for Parker::unpark for removing duplicated logic for
mutex unlock.
From:
5720 void Parker::unpark() {
...
5725 if (s < 1) {
5726 // thread might be parked
5727 if (_cur_index != -1) {
5728 // thread is definitely parked
5729 // must capture correct index before unlocking
5730 int index = _cur_index;
5731 status = pthread_mutex_unlock(_mutex);
5732 assert(status == 0, "invariant");
5733 status = pthread_cond_signal(&_cond[index]);
5734 assert(status == 0, "invariant");
5735 } else {
5736 pthread_mutex_unlock(_mutex);
5737 assert(status == 0, "invariant");
5738 }
5739 } else {
5740 pthread_mutex_unlock(_mutex);
5741 assert(status == 0, "invariant");
5742 }
5743 }
To:
void Parker::unpark() {
...
if ((s < 1) && (_cur_index != -1)) {
// thread is definitely parked
// must capture correct index before unlocking
int index = _cur_index;
status = pthread_mutex_unlock(_mutex);
assert(status == 0, "invariant");
status = pthread_cond_signal(&_cond[index]);
assert(status == 0, "invariant");
} else {
pthread_mutex_unlock(_mutex);
assert(status == 0, "invariant");
}
}
Thanks,
Dmitry
On 08.02.2016 10:16, David Holmes wrote:
> webrev: http://cr.openjdk.java.net/~dholmes/8145725/webrev/
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8145725
>
> In JDK-8130728 we disabled the workaround by default and have not seen
> any issues (other than JDK-8029453). So now the workaround can be
> removed completely.
>
> Thanks,
> David
More information about the hotspot-runtime-dev
mailing list