| 595 | } |
| 596 | |
| 597 | bool BufferPool::FreeBufferArena::PopFreeBuffer( |
| 598 | int64_t buffer_len, BufferHandle* buffer) { |
| 599 | PerSizeLists* lists = GetListsForSize(buffer_len); |
| 600 | // Check before acquiring lock. |
| 601 | if (lists->num_free_buffers.Load() == 0) return false; |
| 602 | |
| 603 | lock_guard<SpinLock> al(lock_); |
| 604 | FreeList* list = &lists->free_buffers; |
| 605 | DCHECK_EQ(lists->num_free_buffers.Load(), list->Size()); |
| 606 | if (!list->PopFreeBuffer(buffer)) return false; |
| 607 | buffer->Unpoison(); |
| 608 | lists->num_free_buffers.Add(-1); |
| 609 | lists->low_water_mark = min<int>(lists->low_water_mark, list->Size()); |
| 610 | return true; |
| 611 | } |
| 612 | |
| 613 | bool BufferPool::FreeBufferArena::EvictCleanPage( |
| 614 | int64_t buffer_len, BufferHandle* buffer) { |