]>
Commit | Line | Data |
---|---|---|
7c673cae | 1 | // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. |
11fdf7f2 TL |
2 | // This source code is licensed under both the GPLv2 (found in the |
3 | // COPYING file in the root directory) and Apache 2.0 License | |
4 | // (found in the LICENSE.Apache file in the root directory). | |
7c673cae FG |
5 | // |
6 | // Copyright (c) 2011 The LevelDB Authors. All rights reserved. | |
7 | // Use of this source code is governed by a BSD-style license that can be | |
8 | // found in the LICENSE file. See the AUTHORS file for names of contributors. | |
9 | // | |
10 | // Abstract interface for allocating memory in blocks. This memory is freed | |
11 | // when the allocator object is destroyed. See the Arena class for more info. | |
12 | ||
13 | #pragma once | |
7c673cae | 14 | #include <cerrno> |
11fdf7f2 TL |
15 | #include <cstddef> |
16 | #include "rocksdb/write_buffer_manager.h" | |
7c673cae | 17 | |
f67539c2 | 18 | namespace ROCKSDB_NAMESPACE { |
7c673cae FG |
19 | |
20 | class Logger; | |
21 | ||
22 | class Allocator { | |
23 | public: | |
24 | virtual ~Allocator() {} | |
25 | ||
26 | virtual char* Allocate(size_t bytes) = 0; | |
27 | virtual char* AllocateAligned(size_t bytes, size_t huge_page_size = 0, | |
28 | Logger* logger = nullptr) = 0; | |
29 | ||
30 | virtual size_t BlockSize() const = 0; | |
31 | }; | |
32 | ||
11fdf7f2 TL |
33 | class AllocTracker { |
34 | public: | |
35 | explicit AllocTracker(WriteBufferManager* write_buffer_manager); | |
f67539c2 TL |
36 | // No copying allowed |
37 | AllocTracker(const AllocTracker&) = delete; | |
38 | void operator=(const AllocTracker&) = delete; | |
39 | ||
11fdf7f2 TL |
40 | ~AllocTracker(); |
41 | void Allocate(size_t bytes); | |
42 | // Call when we're finished allocating memory so we can free it from | |
43 | // the write buffer's limit. | |
44 | void DoneAllocating(); | |
45 | ||
46 | void FreeMem(); | |
47 | ||
48 | bool is_freed() const { return write_buffer_manager_ == nullptr || freed_; } | |
49 | ||
50 | private: | |
51 | WriteBufferManager* write_buffer_manager_; | |
52 | std::atomic<size_t> bytes_allocated_; | |
53 | bool done_allocating_; | |
54 | bool freed_; | |
11fdf7f2 TL |
55 | }; |
56 | ||
f67539c2 | 57 | } // namespace ROCKSDB_NAMESPACE |