Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8273597

Rectify Thread::is_ConcurrentGC_thread()

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Fixed
    • Icon: P4 P4
    • 18
    • 18
    • hotspot
    • None
    • gc
    • b15

      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.

            pliden Per Liden (Inactive)
            pliden Per Liden (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: