X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2FThreadCachedArena.cpp;h=57701a11c044dac89a70ea4de068a34e00596409;hb=9783dc4e7cfa938f1c33666ec0a31c204dff60ed;hp=3c09cb5aed5263eb14c9e4707485ff557f209c97;hpb=5c77fedbef46995a71ffa268c9fcaf49efddd01b;p=folly.git diff --git a/folly/ThreadCachedArena.cpp b/folly/ThreadCachedArena.cpp index 3c09cb5a..57701a11 100644 --- a/folly/ThreadCachedArena.cpp +++ b/folly/ThreadCachedArena.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2013 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