28 PtrQueue::PtrQueue(PtrQueueSet* qset_, bool perm) : |
28 PtrQueue::PtrQueue(PtrQueueSet* qset_, bool perm) : |
29 _qset(qset_), _buf(NULL), _index(0), _active(false), |
29 _qset(qset_), _buf(NULL), _index(0), _active(false), |
30 _perm(perm), _lock(NULL) |
30 _perm(perm), _lock(NULL) |
31 {} |
31 {} |
32 |
32 |
33 PtrQueue::~PtrQueue() { |
33 void PtrQueue::flush() { |
34 if (!_perm && _buf != NULL) { |
34 if (!_perm && _buf != NULL) { |
35 if (_index == _sz) { |
35 if (_index == _sz) { |
36 // No work to do. |
36 // No work to do. |
37 qset()->deallocate_buffer(_buf); |
37 qset()->deallocate_buffer(_buf); |
38 } else { |
38 } else { |
39 // We must NULL out the unused entries, then enqueue. |
39 // We must NULL out the unused entries, then enqueue. |
40 for (size_t i = 0; i < _index; i += oopSize) { |
40 for (size_t i = 0; i < _index; i += oopSize) { |
41 _buf[byte_index_to_index((int)i)] = NULL; |
41 _buf[byte_index_to_index((int)i)] = NULL; |
42 } |
42 } |
43 qset()->enqueue_complete_buffer(_buf); |
43 qset()->enqueue_complete_buffer(_buf); |
44 _buf = NULL; |
|
45 } |
44 } |
|
45 _buf = NULL; |
|
46 _index = 0; |
46 } |
47 } |
47 } |
48 } |
48 |
49 |
49 |
50 |
50 static int byte_index_to_index(int ind) { |
51 static int byte_index_to_index(int ind) { |