124 _fl_owner->_buf_free_list = _fl_owner->_buf_free_list->next(); |
124 _fl_owner->_buf_free_list = _fl_owner->_buf_free_list->next(); |
125 _fl_owner->_buf_free_list_sz--; |
125 _fl_owner->_buf_free_list_sz--; |
126 return res; |
126 return res; |
127 } else { |
127 } else { |
128 // Allocate space for the BufferNode in front of the buffer. |
128 // Allocate space for the BufferNode in front of the buffer. |
129 char *b = NEW_C_HEAP_ARRAY(char, _sz + BufferNode::aligned_size()); |
129 char *b = NEW_C_HEAP_ARRAY(char, _sz + BufferNode::aligned_size(), mtGC); |
130 return BufferNode::make_buffer_from_block(b); |
130 return BufferNode::make_buffer_from_block(b); |
131 } |
131 } |
132 } |
132 } |
133 |
133 |
134 void PtrQueueSet::deallocate_buffer(void** buf) { |
134 void PtrQueueSet::deallocate_buffer(void** buf) { |
147 size_t n = _buf_free_list_sz / 2; |
147 size_t n = _buf_free_list_sz / 2; |
148 while (n > 0) { |
148 while (n > 0) { |
149 assert(_buf_free_list != NULL, "_buf_free_list_sz must be wrong."); |
149 assert(_buf_free_list != NULL, "_buf_free_list_sz must be wrong."); |
150 void* b = BufferNode::make_block_from_node(_buf_free_list); |
150 void* b = BufferNode::make_block_from_node(_buf_free_list); |
151 _buf_free_list = _buf_free_list->next(); |
151 _buf_free_list = _buf_free_list->next(); |
152 FREE_C_HEAP_ARRAY(char, b); |
152 FREE_C_HEAP_ARRAY(char, b, mtGC); |
153 _buf_free_list_sz --; |
153 _buf_free_list_sz --; |
154 n--; |
154 n--; |
155 } |
155 } |
156 } |
156 } |
157 |
157 |