RFR: 8281615: Deadlock caused by jdwp agent [v4]

Chris Plummer cjplummer at openjdk.java.net
Thu Feb 17 17:30:15 UTC 2022


On Thu, 17 Feb 2022 13:49:52 GMT, Zhengyu Gu <zgu at openjdk.org> wrote:

> I believe checking `bagSize() == 0` is an optimization. I think just taking `handlerLock` lock before calling `classTrack_reset()` ensures no race can happen and seems harmless.

Yes, it would be an optimization, and one I'm now seeing is not really needed since processUnloads() is not called as frequently as I thought (only called after a GC completes).

The grabbing of the handlerLock is questionable. Kim also called it out in [JDK-8256811](https://bugs.openjdk.java.net/browse/JDK-8256811):

``` I think this can be fixed by removing the conditionalization of the call to classTrack_processUnloads, and just do it unconditionally. There is a (somewhat confusing) comment saying that the conditionalization is there to avoid taking the handler lock when that isn't needed. But it's not clear why that lock is being taken on that code path at all, as classTrack_processUnloads contains it's own internal locking. ```

-------------

PR: https://git.openjdk.java.net/jdk/pull/7461


More information about the serviceability-dev mailing list