equal
deleted
inserted
replaced
148 node = BufferNode::allocate(_buffer_size); |
148 node = BufferNode::allocate(_buffer_size); |
149 } else { |
149 } else { |
150 // Decrement count after getting buffer from free list. This, along |
150 // Decrement count after getting buffer from free list. This, along |
151 // with incrementing count before adding to free list, ensures count |
151 // with incrementing count before adding to free list, ensures count |
152 // never underflows. |
152 // never underflows. |
153 size_t count = Atomic::sub(1u, &_free_count); |
153 size_t count = Atomic::sub(&_free_count, 1u); |
154 assert((count + 1) != 0, "_free_count underflow"); |
154 assert((count + 1) != 0, "_free_count underflow"); |
155 } |
155 } |
156 return node; |
156 return node; |
157 } |
157 } |
158 |
158 |
210 size_t count = 1; |
210 size_t count = 1; |
211 for (BufferNode* next = first->next(); next != NULL; next = next->next()) { |
211 for (BufferNode* next = first->next(); next != NULL; next = next->next()) { |
212 last = next; |
212 last = next; |
213 ++count; |
213 ++count; |
214 } |
214 } |
215 Atomic::sub(count, &_pending_count); |
215 Atomic::sub(&_pending_count, count); |
216 |
216 |
217 // Wait for any in-progress pops, to avoid ABA for them. |
217 // Wait for any in-progress pops, to avoid ABA for them. |
218 GlobalCounter::write_synchronize(); |
218 GlobalCounter::write_synchronize(); |
219 |
219 |
220 // Add synchronized nodes to _free_list. |
220 // Add synchronized nodes to _free_list. |
234 for ( ; removed < remove_goal; ++removed) { |
234 for ( ; removed < remove_goal; ++removed) { |
235 BufferNode* node = _free_list.pop(); |
235 BufferNode* node = _free_list.pop(); |
236 if (node == NULL) break; |
236 if (node == NULL) break; |
237 BufferNode::deallocate(node); |
237 BufferNode::deallocate(node); |
238 } |
238 } |
239 size_t new_count = Atomic::sub(removed, &_free_count); |
239 size_t new_count = Atomic::sub(&_free_count, removed); |
240 log_debug(gc, ptrqueue, freelist) |
240 log_debug(gc, ptrqueue, freelist) |
241 ("Reduced %s free list by " SIZE_FORMAT " to " SIZE_FORMAT, |
241 ("Reduced %s free list by " SIZE_FORMAT " to " SIZE_FORMAT, |
242 name(), removed, new_count); |
242 name(), removed, new_count); |
243 return removed; |
243 return removed; |
244 } |
244 } |