Skip to content

Commit

Permalink
gossip: store regular pointer to subscribers instead of shared one
Browse files Browse the repository at this point in the history
Some subscribers are allocated statically, so it is a churn to make
shared pointers from them. And since registered subscribers have to be
unregister before been destroyed anyway there is no lifetime issue here
that require use of a smart pointer.
  • Loading branch information
gleb-cloudius committed Apr 20, 2015
1 parent 02fb270 commit c39af6d
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
12 changes: 6 additions & 6 deletions gms/gossiper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ void gossiper::apply_state_locally(std::map<inet_address, endpoint_state>& map)

void gossiper::remove_endpoint(inet_address endpoint) {
// do subscribers first so anything in the subscriber that depends on gossiper state won't get confused
for (shared_ptr<i_endpoint_state_change_subscriber>& subscriber : _subscribers) {
for (auto& subscriber : _subscribers) {
subscriber->on_remove(endpoint);
}

Expand Down Expand Up @@ -430,11 +430,11 @@ bool gossiper::seen_any_seed() {
return false;
}

void gossiper::register_(shared_ptr<i_endpoint_state_change_subscriber> subscriber) {
_subscribers.push_back(std::move(subscriber));
void gossiper::register_(i_endpoint_state_change_subscriber* subscriber) {
_subscribers.push_back(subscriber);
}

void gossiper::unregister_(shared_ptr<i_endpoint_state_change_subscriber> subscriber) {
void gossiper::unregister_(i_endpoint_state_change_subscriber* subscriber) {
_subscribers.remove(subscriber);
}

Expand Down Expand Up @@ -860,7 +860,7 @@ void gossiper::real_mark_alive(inet_address addr, endpoint_state local_state) {
_expire_time_endpoint_map.erase(addr);
// logger.debug("removing expire time for endpoint : {}", addr);
// logger.info("inet_address {} is now UP", addr);
for (shared_ptr<i_endpoint_state_change_subscriber>& subscriber : _subscribers)
for (auto& subscriber : _subscribers)
subscriber->on_alive(addr, local_state);
// if (logger.isTraceEnabled())
// logger.trace("Notified {}", _subscribers);
Expand All @@ -873,7 +873,7 @@ void gossiper::mark_dead(inet_address addr, endpoint_state local_state) {
_live_endpoints.erase(addr);
_unreachable_endpoints[addr] = now_nanos();
// logger.info("inet_address {} is now DOWN", addr);
for (shared_ptr<i_endpoint_state_change_subscriber>& subscriber : _subscribers)
for (auto& subscriber : _subscribers)
subscriber->on_dead(addr, local_state);
// if (logger.isTraceEnabled())
// logger.trace("Notified {}", _subscribers);
Expand Down
6 changes: 3 additions & 3 deletions gms/gossiper.hh
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public:
private:
std::random_device _random;
/* subscribers for interest in EndpointState change */
std::list<shared_ptr<i_endpoint_state_change_subscriber>> _subscribers;
std::list<i_endpoint_state_change_subscriber*> _subscribers;

/* live member set */
std::set<inet_address> _live_endpoints;
Expand Down Expand Up @@ -170,14 +170,14 @@ public:
*
* @param subscriber module which implements the IEndpointStateChangeSubscriber
*/
void register_(shared_ptr<i_endpoint_state_change_subscriber> subscriber);
void register_(i_endpoint_state_change_subscriber* subscriber);

/**
* Unregister interest for state changes.
*
* @param subscriber module which implements the IEndpointStateChangeSubscriber
*/
void unregister_(shared_ptr<i_endpoint_state_change_subscriber> subscriber);
void unregister_(i_endpoint_state_change_subscriber* subscriber);

std::set<inet_address> get_live_members();

Expand Down

0 comments on commit c39af6d

Please sign in to comment.