Wrapper for std::set<> that overrides the allocator.

pull/20454/head
Mark D. Roth 5 years ago
parent c8c755ac9d
commit 076ee0bc85
  1. 1
      BUILD
  2. 2
      BUILD.gn
  3. 1
      build.yaml
  4. 1
      gRPC-C++.podspec
  5. 2
      gRPC-Core.podspec
  6. 1
      grpc.gemspec
  7. 1
      package.xml
  8. 6
      src/core/ext/filters/client_channel/client_channel.cc
  9. 5
      src/core/lib/gprpp/memory.h
  10. 33
      src/core/lib/gprpp/set.h
  11. 1
      tools/doxygen/Doxyfile.c++.internal
  12. 1
      tools/doxygen/Doxyfile.core.internal

@ -521,6 +521,7 @@ grpc_cc_library(
"src/core/lib/gprpp/map.h", "src/core/lib/gprpp/map.h",
"src/core/lib/gprpp/memory.h", "src/core/lib/gprpp/memory.h",
"src/core/lib/gprpp/mpscq.h", "src/core/lib/gprpp/mpscq.h",
"src/core/lib/gprpp/set.h",
"src/core/lib/gprpp/string_view.h", "src/core/lib/gprpp/string_view.h",
"src/core/lib/gprpp/sync.h", "src/core/lib/gprpp/sync.h",
"src/core/lib/gprpp/thd.h", "src/core/lib/gprpp/thd.h",

@ -149,6 +149,7 @@ config("grpc_config") {
"src/core/lib/gprpp/memory.h", "src/core/lib/gprpp/memory.h",
"src/core/lib/gprpp/mpscq.cc", "src/core/lib/gprpp/mpscq.cc",
"src/core/lib/gprpp/mpscq.h", "src/core/lib/gprpp/mpscq.h",
"src/core/lib/gprpp/set.h",
"src/core/lib/gprpp/sync.h", "src/core/lib/gprpp/sync.h",
"src/core/lib/gprpp/thd.h", "src/core/lib/gprpp/thd.h",
"src/core/lib/gprpp/thd_posix.cc", "src/core/lib/gprpp/thd_posix.cc",
@ -1253,6 +1254,7 @@ config("grpc_config") {
"src/core/lib/gprpp/orphanable.h", "src/core/lib/gprpp/orphanable.h",
"src/core/lib/gprpp/ref_counted.h", "src/core/lib/gprpp/ref_counted.h",
"src/core/lib/gprpp/ref_counted_ptr.h", "src/core/lib/gprpp/ref_counted_ptr.h",
"src/core/lib/gprpp/set.h",
"src/core/lib/gprpp/string_view.h", "src/core/lib/gprpp/string_view.h",
"src/core/lib/gprpp/sync.h", "src/core/lib/gprpp/sync.h",
"src/core/lib/gprpp/thd.h", "src/core/lib/gprpp/thd.h",

@ -291,6 +291,7 @@ filegroups:
- src/core/lib/gprpp/map.h - src/core/lib/gprpp/map.h
- src/core/lib/gprpp/memory.h - src/core/lib/gprpp/memory.h
- src/core/lib/gprpp/mpscq.h - src/core/lib/gprpp/mpscq.h
- src/core/lib/gprpp/set.h
- src/core/lib/gprpp/sync.h - src/core/lib/gprpp/sync.h
- src/core/lib/gprpp/thd.h - src/core/lib/gprpp/thd.h
- src/core/lib/profiling/timers.h - src/core/lib/profiling/timers.h

@ -311,6 +311,7 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/map.h', 'src/core/lib/gprpp/map.h',
'src/core/lib/gprpp/memory.h', 'src/core/lib/gprpp/memory.h',
'src/core/lib/gprpp/mpscq.h', 'src/core/lib/gprpp/mpscq.h',
'src/core/lib/gprpp/set.h',
'src/core/lib/gprpp/sync.h', 'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h', 'src/core/lib/gprpp/thd.h',
'src/core/lib/profiling/timers.h', 'src/core/lib/profiling/timers.h',

@ -214,6 +214,7 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/map.h', 'src/core/lib/gprpp/map.h',
'src/core/lib/gprpp/memory.h', 'src/core/lib/gprpp/memory.h',
'src/core/lib/gprpp/mpscq.h', 'src/core/lib/gprpp/mpscq.h',
'src/core/lib/gprpp/set.h',
'src/core/lib/gprpp/sync.h', 'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h', 'src/core/lib/gprpp/thd.h',
'src/core/lib/profiling/timers.h', 'src/core/lib/profiling/timers.h',
@ -988,6 +989,7 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/map.h', 'src/core/lib/gprpp/map.h',
'src/core/lib/gprpp/memory.h', 'src/core/lib/gprpp/memory.h',
'src/core/lib/gprpp/mpscq.h', 'src/core/lib/gprpp/mpscq.h',
'src/core/lib/gprpp/set.h',
'src/core/lib/gprpp/sync.h', 'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h', 'src/core/lib/gprpp/thd.h',
'src/core/lib/profiling/timers.h', 'src/core/lib/profiling/timers.h',

@ -108,6 +108,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/gprpp/map.h ) s.files += %w( src/core/lib/gprpp/map.h )
s.files += %w( src/core/lib/gprpp/memory.h ) s.files += %w( src/core/lib/gprpp/memory.h )
s.files += %w( src/core/lib/gprpp/mpscq.h ) s.files += %w( src/core/lib/gprpp/mpscq.h )
s.files += %w( src/core/lib/gprpp/set.h )
s.files += %w( src/core/lib/gprpp/sync.h ) s.files += %w( src/core/lib/gprpp/sync.h )
s.files += %w( src/core/lib/gprpp/thd.h ) s.files += %w( src/core/lib/gprpp/thd.h )
s.files += %w( src/core/lib/profiling/timers.h ) s.files += %w( src/core/lib/profiling/timers.h )

@ -113,6 +113,7 @@
<file baseinstalldir="/" name="src/core/lib/gprpp/map.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/gprpp/map.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/memory.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/gprpp/memory.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/mpscq.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/gprpp/mpscq.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/set.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/sync.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/gprpp/sync.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/thd.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/gprpp/thd.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/profiling/timers.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/profiling/timers.h" role="src" />

@ -26,9 +26,6 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <map>
#include <set>
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/string_util.h> #include <grpc/support/string_util.h>
@ -56,6 +53,7 @@
#include "src/core/lib/gprpp/inlined_vector.h" #include "src/core/lib/gprpp/inlined_vector.h"
#include "src/core/lib/gprpp/manual_constructor.h" #include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/gprpp/map.h" #include "src/core/lib/gprpp/map.h"
#include "src/core/lib/gprpp/set.h"
#include "src/core/lib/gprpp/sync.h" #include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/iomgr/combiner.h" #include "src/core/lib/iomgr/combiner.h"
#include "src/core/lib/iomgr/iomgr.h" #include "src/core/lib/iomgr/iomgr.h"
@ -297,7 +295,7 @@ class ChannelData {
// The set of SubchannelWrappers that currently exist. // The set of SubchannelWrappers that currently exist.
// No need to hold a ref, since the map is updated in the control-plane // No need to hold a ref, since the map is updated in the control-plane
// combiner when the SubchannelWrappers are created and destroyed. // combiner when the SubchannelWrappers are created and destroyed.
std::set<SubchannelWrapper*> subchannel_wrappers_; Set<SubchannelWrapper*> subchannel_wrappers_;
// Pending ConnectedSubchannel updates for each SubchannelWrapper. // Pending ConnectedSubchannel updates for each SubchannelWrapper.
// Updates are queued here in the control plane combiner and then applied // Updates are queued here in the control plane combiner and then applied
// in the data plane mutex when the picker is updated. // in the data plane mutex when the picker is updated.

@ -103,6 +103,11 @@ class Allocator {
}; };
typedef std::true_type is_always_equal; typedef std::true_type is_always_equal;
Allocator() = default;
template <class U>
Allocator(const Allocator<U>&) {}
pointer address(reference x) const { return &x; } pointer address(reference x) const { return &x; }
const_pointer address(const_reference x) const { return &x; } const_pointer address(const_reference x) const { return &x; }
pointer allocate(std::size_t n, pointer allocate(std::size_t n,

@ -0,0 +1,33 @@
//
// Copyright 2017 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#ifndef GRPC_CORE_LIB_GPRPP_SET_H
#define GRPC_CORE_LIB_GPRPP_SET_H
#include <grpc/support/port_platform.h>
#include <set>
#include "src/core/lib/gprpp/memory.h"
namespace grpc_core {
template <typename T, typename Compare = std::less<T>>
using Set = std::set<T, Compare, Allocator<T>>;
} // namespace grpc_core
#endif /* GRPC_CORE_LIB_GPRPP_SET_H */

@ -1119,6 +1119,7 @@ src/core/lib/gprpp/optional.h \
src/core/lib/gprpp/orphanable.h \ src/core/lib/gprpp/orphanable.h \
src/core/lib/gprpp/ref_counted.h \ src/core/lib/gprpp/ref_counted.h \
src/core/lib/gprpp/ref_counted_ptr.h \ src/core/lib/gprpp/ref_counted_ptr.h \
src/core/lib/gprpp/set.h \
src/core/lib/gprpp/string_view.h \ src/core/lib/gprpp/string_view.h \
src/core/lib/gprpp/sync.h \ src/core/lib/gprpp/sync.h \
src/core/lib/gprpp/thd.h \ src/core/lib/gprpp/thd.h \

@ -1255,6 +1255,7 @@ src/core/lib/gprpp/optional.h \
src/core/lib/gprpp/orphanable.h \ src/core/lib/gprpp/orphanable.h \
src/core/lib/gprpp/ref_counted.h \ src/core/lib/gprpp/ref_counted.h \
src/core/lib/gprpp/ref_counted_ptr.h \ src/core/lib/gprpp/ref_counted_ptr.h \
src/core/lib/gprpp/set.h \
src/core/lib/gprpp/string_view.h \ src/core/lib/gprpp/string_view.h \
src/core/lib/gprpp/sync.h \ src/core/lib/gprpp/sync.h \
src/core/lib/gprpp/thd.h \ src/core/lib/gprpp/thd.h \

Loading…
Cancel
Save