| 678 | } |
| 679 | |
| 680 | Status ScanRange::AllocateBuffersForRange( |
| 681 | BufferPool::ClientHandle* bp_client, int64_t max_bytes, |
| 682 | int64_t min_buffer_size, int64_t max_buffer_size) { |
| 683 | vector<unique_ptr<BufferDescriptor>> buffers; |
| 684 | Status status = buffer_manager_->AllocateBuffersForRange(bp_client, max_bytes, buffers, |
| 685 | min_buffer_size, max_buffer_size); |
| 686 | if (!status.ok() && !buffers.empty()) { |
| 687 | unique_lock<mutex> lock(lock_); |
| 688 | buffer_manager_->CleanUpBuffers(lock, move(buffers)); |
| 689 | } else { |
| 690 | AddUnusedBuffers(move(buffers), false); |
| 691 | } |
| 692 | return status; |
| 693 | } |
| 694 | |
| 695 | void ScanRange::ScheduleScanRange() { |
| 696 | unique_lock<mutex> reader_lock(reader_->lock_); |