X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FThreadCachedArena.cpp;h=57701a11c044dac89a70ea4de068a34e00596409;hp=e81cfa77519faf659fd7f6bda39ca5354f5c9d59;hb=a857f83b2b25f42eeba1524ebca1bd2e74abc71a;hpb=27494a20393fa45072e7d526d358835f3abe312a diff --git a/folly/ThreadCachedArena.cpp b/folly/ThreadCachedArena.cpp index e81cfa77..57701a11 100644 --- a/folly/ThreadCachedArena.cpp +++ b/folly/ThreadCachedArena.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2012 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,16 +14,19 @@ * limitations under the License. */ -#include "folly/ThreadCachedArena.h" +#include + +#include namespace folly { -ThreadCachedArena::ThreadCachedArena(size_t minBlockSize) - : minBlockSize_(minBlockSize) { +ThreadCachedArena::ThreadCachedArena(size_t minBlockSize, size_t maxAlign) + : minBlockSize_(minBlockSize), maxAlign_(maxAlign) { } SysArena* ThreadCachedArena::allocateThreadLocalArena() { - SysArena* arena = new SysArena(minBlockSize_); + SysArena* arena = + new SysArena(minBlockSize_, SysArena::kNoSizeLimit, maxAlign_); auto disposer = [this] (SysArena* t, TLPDestructionMode mode) { std::unique_ptr tp(t); // ensure it gets deleted if (mode == TLPDestructionMode::THIS_THREAD) { @@ -35,9 +38,16 @@ SysArena* ThreadCachedArena::allocateThreadLocalArena() { } void ThreadCachedArena::zombify(SysArena&& arena) { - std::lock_guard lock(zombiesMutex_); - zombies_.merge(std::move(arena)); + zombies_->merge(std::move(arena)); } -} // namespace folly +size_t ThreadCachedArena::totalSize() const { + size_t result = sizeof(ThreadCachedArena); + for (const auto& arena : arena_.accessAllThreads()) { + result += arena.totalSize(); + } + result += zombies_->totalSize() - sizeof(SysArena); + return result; +} +} // namespace folly