hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.cpp
bool DirtyCardQueueSet::
apply_closure_to_completed_buffer_helper(CardTableEntryClosure* cl,
int worker_i,
BufferNode* nd) {
{- -------------------------------------------
(1) nd 引数が NULL でなければ,
その BufferNode を処理し, true もしくは false をリターンする.
---------------------------------------- -}
if (nd != NULL) {
{- -------------------------------------------
(1.1) (変数宣言など)
---------------------------------------- -}
void **buf = BufferNode::make_buffer_from_node(nd);
size_t index = nd->index();
{- -------------------------------------------
(1.1) DirtyCardQueue::apply_closure_to_buffer() を呼んで,
対象のバッファに対して, cl 引数で指定された Closure を適用する.
もし処理が完了したら,
処理し終わったバッファを PtrQueueSet::deallocate_buffer() で開放し,
true をリターンする.
逆に, 処理が途中で失敗した場合は,
PtrQueueSet::enqueue_complete_buffer() を呼んで
もう一度バッファを登録しなおした後,
false をリターンする.
---------------------------------------- -}
bool b =
DirtyCardQueue::apply_closure_to_buffer(cl, buf,
index, _sz,
true, worker_i);
if (b) {
deallocate_buffer(buf);
return true; // In normal case, go on to next buffer.
} else {
enqueue_complete_buffer(buf, index);
return false;
}
{- -------------------------------------------
(1) nd 引数が NULL の場合には, false をリターンするだけ.
---------------------------------------- -}
} else {
return false;
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.