equal
deleted
inserted
replaced
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. |