147 assert(prev != NULL, "invariant");
148 assert(prev->next() == tail, "invariant");
149 prev->set_next(NULL);
150 _free_list = tail;
151 _free_count -= remove;
152 }
153 }
154 while (head != NULL) {
155 BufferNode* next = head->next();
156 BufferNode::deallocate(head);
157 head = next;
158 }
159 }
160
161 PtrQueueSet::PtrQueueSet(bool notify_when_complete) :
162 _allocator(NULL),
163 _cbl_mon(NULL),
164 _completed_buffers_head(NULL),
165 _completed_buffers_tail(NULL),
166 _n_completed_buffers(0),
167 _process_completed_buffers_threshold(_process_completed_buffers_threshold_never),
168 _process_completed(false),
169 _all_active(false),
170 _notify_when_complete(notify_when_complete),
171 _max_completed_buffers(_max_completed_buffers_unlimited),
172 _completed_buffers_padding(0)
173 {}
174
175 PtrQueueSet::~PtrQueueSet() {
176 // There are presently only a couple (derived) instances ever
177 // created, and they are permanent, so no harm currently done by
178 // doing nothing here.
179 }
180
181 void PtrQueueSet::initialize(Monitor* cbl_mon,
182 BufferNode::Allocator* allocator) {
183 assert(cbl_mon != NULL && allocator != NULL, "Init order issue?");
184 _cbl_mon = cbl_mon;
185 _allocator = allocator;
186 }
187
188 void** PtrQueueSet::allocate_buffer() {
189 BufferNode* node = _allocator->allocate();
190 return BufferNode::make_buffer_from_node(node);
191 }
|
147 assert(prev != NULL, "invariant");
148 assert(prev->next() == tail, "invariant");
149 prev->set_next(NULL);
150 _free_list = tail;
151 _free_count -= remove;
152 }
153 }
154 while (head != NULL) {
155 BufferNode* next = head->next();
156 BufferNode::deallocate(head);
157 head = next;
158 }
159 }
160
161 PtrQueueSet::PtrQueueSet(bool notify_when_complete) :
162 _allocator(NULL),
163 _cbl_mon(NULL),
164 _completed_buffers_head(NULL),
165 _completed_buffers_tail(NULL),
166 _n_completed_buffers(0),
167 _process_completed_buffers_threshold(ProcessCompletedBuffersThresholdNever),
168 _process_completed(false),
169 _all_active(false),
170 _notify_when_complete(notify_when_complete),
171 _max_completed_buffers(MaxCompletedBuffersUnlimited),
172 _completed_buffers_padding(0)
173 {}
174
175 PtrQueueSet::~PtrQueueSet() {
176 // There are presently only a couple (derived) instances ever
177 // created, and they are permanent, so no harm currently done by
178 // doing nothing here.
179 }
180
181 void PtrQueueSet::initialize(Monitor* cbl_mon,
182 BufferNode::Allocator* allocator) {
183 assert(cbl_mon != NULL && allocator != NULL, "Init order issue?");
184 _cbl_mon = cbl_mon;
185 _allocator = allocator;
186 }
187
188 void** PtrQueueSet::allocate_buffer() {
189 BufferNode* node = _allocator->allocate();
190 return BufferNode::make_buffer_from_node(node);
191 }
|