src/hotspot/share/gc/shared/ptrQueue.cpp
changeset 52637 0877040ec224
parent 52582 6df094be7f58
child 52684 e62fe5079d64
equal deleted inserted replaced
52636:f52ea62d68cc 52637:0877040ec224
    71   assert(index() > 0, "postcondition");
    71   assert(index() > 0, "postcondition");
    72   assert(index() <= capacity(), "invariant");
    72   assert(index() <= capacity(), "invariant");
    73   _index -= _element_size;
    73   _index -= _element_size;
    74   _buf[index()] = ptr;
    74   _buf[index()] = ptr;
    75 }
    75 }
    76 
       
    77 void PtrQueue::locking_enqueue_completed_buffer(BufferNode* node) {
       
    78   assert(_lock->owned_by_self(), "Required.");
       
    79   qset()->enqueue_complete_buffer(node);
       
    80 }
       
    81 
       
    82 
    76 
    83 BufferNode* BufferNode::allocate(size_t size) {
    77 BufferNode* BufferNode::allocate(size_t size) {
    84   size_t byte_size = size * sizeof(void*);
    78   size_t byte_size = size * sizeof(void*);
    85   void* data = NEW_C_HEAP_ARRAY(char, buffer_offset() + byte_size, mtGC);
    79   void* data = NEW_C_HEAP_ARRAY(char, buffer_offset() + byte_size, mtGC);
    86   return new (data) BufferNode;
    80   return new (data) BufferNode;
   220       assert(_lock->owned_by_self(), "Required.");
   214       assert(_lock->owned_by_self(), "Required.");
   221 
   215 
   222       BufferNode* node = BufferNode::make_node_from_buffer(_buf, index());
   216       BufferNode* node = BufferNode::make_node_from_buffer(_buf, index());
   223       _buf = NULL;         // clear shared _buf field
   217       _buf = NULL;         // clear shared _buf field
   224 
   218 
   225       locking_enqueue_completed_buffer(node); // enqueue completed buffer
   219       qset()->enqueue_complete_buffer(node);
   226       assert(_buf == NULL, "multiple enqueuers appear to be racing");
   220       assert(_buf == NULL, "multiple enqueuers appear to be racing");
   227     } else {
   221     } else {
   228       BufferNode* node = BufferNode::make_node_from_buffer(_buf, index());
   222       BufferNode* node = BufferNode::make_node_from_buffer(_buf, index());
   229       if (qset()->process_or_enqueue_complete_buffer(node)) {
   223       if (qset()->process_or_enqueue_complete_buffer(node)) {
   230         // Recycle the buffer. No allocation.
   224         // Recycle the buffer. No allocation.