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

DirtyCardQueueSet::get_completed_buffer should not clear _process_completed

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: P5
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 12
    • Component/s: hotspot
    • Labels:
    • Subcomponent:
      gc
    • Resolved In Build:
      b22
    • CPU:
      generic
    • OS:
      generic

      Description

      DirtyCardQueueSet::get_completed_buffer sets _process_completed to false if the number of completed buffers is not greater than the requested stop_at value. The effect of this is to put the primary concurrent refinement thread into a state where it appears to be inactive (pt->is_active() will be false), even though the thread may be (and likely is) still actually active. For example, if a high numbered refinement thread were to hit its (high) stop_at limit, the flag would be set false inappropriately.

      This can cause PtrQueueSet::enqueue_complete_buffer to unnecessarily notify that primary thread (via the shared cbl_mon). It also might be possible for the primary thread to block waiting for work when there is already work available. (Though circumstances and timing for that seem pretty unlikely. And it would unblock on the next buffer enqueue.)

      This behavior appears to be a day1-G1 bug.

        Attachments

          Activity

            People

            • Assignee:
              kbarrett Kim Barrett
              Reporter:
              kbarrett Kim Barrett
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: