summaryrefslogtreecommitdiff
path: root/grpc/src/core/lib/slice/slice_intern.cc
diff options
context:
space:
mode:
Diffstat (limited to 'grpc/src/core/lib/slice/slice_intern.cc')
-rw-r--r--grpc/src/core/lib/slice/slice_intern.cc11
1 files changed, 5 insertions, 6 deletions
diff --git a/grpc/src/core/lib/slice/slice_intern.cc b/grpc/src/core/lib/slice/slice_intern.cc
index 6e03f480..04681304 100644
--- a/grpc/src/core/lib/slice/slice_intern.cc
+++ b/grpc/src/core/lib/slice/slice_intern.cc
@@ -44,13 +44,13 @@
using grpc_core::InternedSliceRefcount;
typedef struct slice_shard {
- gpr_mu mu;
+ grpc_core::Mutex mu;
InternedSliceRefcount** strs;
size_t count;
size_t capacity;
} slice_shard;
-static slice_shard g_shards[SHARD_COUNT];
+static slice_shard* g_shards;
struct static_metadata_hash_ent {
uint32_t hash;
@@ -259,13 +259,12 @@ template <typename SliceArgs>
static InternedSliceRefcount* FindOrCreateInternedSlice(uint32_t hash,
const SliceArgs& args) {
slice_shard* shard = &g_shards[SHARD_IDX(hash)];
- gpr_mu_lock(&shard->mu);
+ grpc_core::MutexLock lock(&shard->mu);
const size_t idx = TABLE_IDX(hash, shard->capacity);
InternedSliceRefcount* s = MatchInternedSliceLocked(hash, idx, args);
if (s == nullptr) {
s = InternNewStringLocked(shard, idx, hash, args);
}
- gpr_mu_unlock(&shard->mu);
return s;
}
@@ -312,9 +311,9 @@ void grpc_slice_intern_init(void) {
grpc_core::g_hash_seed =
static_cast<uint32_t>(gpr_now(GPR_CLOCK_REALTIME).tv_nsec);
}
+ g_shards = new slice_shard[SHARD_COUNT];
for (size_t i = 0; i < SHARD_COUNT; i++) {
slice_shard* shard = &g_shards[i];
- gpr_mu_init(&shard->mu);
shard->count = 0;
shard->capacity = INITIAL_SHARD_CAPACITY;
shard->strs = static_cast<InternedSliceRefcount**>(
@@ -352,7 +351,6 @@ void grpc_slice_intern_init(void) {
void grpc_slice_intern_shutdown(void) {
for (size_t i = 0; i < SHARD_COUNT; i++) {
slice_shard* shard = &g_shards[i];
- gpr_mu_destroy(&shard->mu);
/* TODO(ctiller): GPR_ASSERT(shard->count == 0); */
if (shard->count != 0) {
gpr_log(GPR_DEBUG, "WARNING: %" PRIuPTR " metadata strings were leaked",
@@ -371,4 +369,5 @@ void grpc_slice_intern_shutdown(void) {
}
gpr_free(shard->strs);
}
+ delete[] g_shards;
}