Commit 49ff696c by Abseil Team Committed by Copybara-Service

Migrate empty CrcCordState to absl::NoDestructor.

Note that this only changes how we allocate the empty state, and reference countings of `empty` stay the same.

PiperOrigin-RevId: 599526339
Change-Id: I2c6aaf875c144c947e17fe8f69692b1195b55dd7
parent fe16a5e7
...@@ -182,8 +182,8 @@ cc_library( ...@@ -182,8 +182,8 @@ cc_library(
deps = [ deps = [
":crc32c", ":crc32c",
"//absl/base:config", "//absl/base:config",
"//absl/base:no_destructor",
"//absl/numeric:bits", "//absl/numeric:bits",
"//absl/strings",
], ],
) )
......
...@@ -159,6 +159,7 @@ absl_cc_library( ...@@ -159,6 +159,7 @@ absl_cc_library(
absl::crc32c absl::crc32c
absl::config absl::config
absl::strings absl::strings
absl::no_destructor
) )
absl_cc_test( absl_cc_test(
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <cassert> #include <cassert>
#include "absl/base/config.h" #include "absl/base/config.h"
#include "absl/base/no_destructor.h"
#include "absl/numeric/bits.h" #include "absl/numeric/bits.h"
namespace absl { namespace absl {
...@@ -24,14 +25,14 @@ ABSL_NAMESPACE_BEGIN ...@@ -24,14 +25,14 @@ ABSL_NAMESPACE_BEGIN
namespace crc_internal { namespace crc_internal {
CrcCordState::RefcountedRep* CrcCordState::RefSharedEmptyRep() { CrcCordState::RefcountedRep* CrcCordState::RefSharedEmptyRep() {
static CrcCordState::RefcountedRep* empty = new CrcCordState::RefcountedRep; static absl::NoDestructor<CrcCordState::RefcountedRep> empty;
assert(empty->count.load(std::memory_order_relaxed) >= 1); assert(empty->count.load(std::memory_order_relaxed) >= 1);
assert(empty->rep.removed_prefix.length == 0); assert(empty->rep.removed_prefix.length == 0);
assert(empty->rep.prefix_crc.empty()); assert(empty->rep.prefix_crc.empty());
Ref(empty); Ref(empty.get());
return empty; return empty.get();
} }
CrcCordState::CrcCordState() : refcounted_rep_(new RefcountedRep) {} CrcCordState::CrcCordState() : refcounted_rep_(new RefcountedRep) {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment