]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/rocksdb/util/allocator.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / rocksdb / util / allocator.h
index ee253528a642677512a05b061601d5a804f70602..505d6ba2bbfb06743cbd9d335feb51cab16af7b0 100644 (file)
@@ -1,7 +1,7 @@
 //  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
-//  This source code is licensed under the BSD-style license found in the
-//  LICENSE file in the root directory of this source tree. An additional grant
-//  of patent rights can be found in the PATENTS file in the same directory.
+//  This source code is licensed under both the GPLv2 (found in the
+//  COPYING file in the root directory) and Apache 2.0 License
+//  (found in the LICENSE.Apache file in the root directory).
 //
 // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
@@ -11,8 +11,9 @@
 // when the allocator object is destroyed. See the Arena class for more info.
 
 #pragma once
-#include <cstddef>
 #include <cerrno>
+#include <cstddef>
+#include "rocksdb/write_buffer_manager.h"
 
 namespace rocksdb {
 
@@ -29,4 +30,28 @@ class Allocator {
   virtual size_t BlockSize() const = 0;
 };
 
+class AllocTracker {
+ public:
+  explicit AllocTracker(WriteBufferManager* write_buffer_manager);
+  ~AllocTracker();
+  void Allocate(size_t bytes);
+  // Call when we're finished allocating memory so we can free it from
+  // the write buffer's limit.
+  void DoneAllocating();
+
+  void FreeMem();
+
+  bool is_freed() const { return write_buffer_manager_ == nullptr || freed_; }
+
+ private:
+  WriteBufferManager* write_buffer_manager_;
+  std::atomic<size_t> bytes_allocated_;
+  bool done_allocating_;
+  bool freed_;
+
+  // No copying allowed
+  AllocTracker(const AllocTracker&);
+  void operator=(const AllocTracker&);
+};
+
 }  // namespace rocksdb