Integrated: 8273597: Rectify Thread::is_ConcurrentGC_thread()
Per Liden
pliden at openjdk.java.net
Tue Sep 14 10:32:11 UTC 2021
On Fri, 10 Sep 2021 12:39:14 GMT, Per Liden <pliden at openjdk.org> wrote:
> `Thread::is_ConcurrentGC_thread()` behaves differently to all other `Thread::is_xxx_thread()` functions, in the sense that it doesn't directly map to a distinct `Thread` sub-class. Instead, `is_ConcurrentGC_thread()` can today return true for both `ConcurrentGCThread` and `GangWorker`. These two classes have no super/sub-class relation. This is confusing and and potentially dangerous.
>
> It would be reasonable to think that code like this would be correct:
>
>
> if (thread->is_ConcurrentGC_thread()) {
> conc_thread = static_cast<ConcurrentGCThread*>(thread);
> ...
> }
>
>
> but it's not, since we might try to cast a `GangWorker` to a `ConcurrentGCThread`. And again, these two classes have no super/sub-class relation.
>
> I propose that we clean this up, so that `is_ConcurrentGCThread()` only returns true for threads inheriting from `ConcurrentGCThread`. The main side-effect is that a handful of asserts need to be adjusted. In return, the code example above would become legal, and we can also remove some cruft from `WorkGang`/`GangWorker`.
This pull request has now been integrated.
Changeset: 38845805
Author: Per Liden <pliden at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/3884580591e932536a078f4f138920dcc8139c1a
Stats: 61 lines in 18 files changed: 12 ins; 27 del; 22 mod
8273597: Rectify Thread::is_ConcurrentGC_thread()
Reviewed-by: stefank, coleenp
-------------
PR: https://git.openjdk.java.net/jdk/pull/5463
More information about the shenandoah-dev
mailing list