EVALUATION
Race between concurrent marking thread (when marking is aborted for a full GC) and the VM thread on the _mark_in_progress flag. When concurrent marking is aborted because of a full GC, the concurrent mark thread set the _mark_in_progress flag to false. The VM thread reads the value of this flag during an evacuation pause to see if it should drain all the SATB buffers. The race comes about because the CM thread set the flag when it is not participating in safepoints (i.e. is not part of the suspendible thread set).
Normally the flag is set as part of the cleanup operation (a safepoint operation instigated by the CM thread) - but the cleanup is skipped when marking is aborted.
|