diff --git a/src/box/replication.cc b/src/box/replication.cc index ee102a5978cf2cf001d6d3feff9061bec8af2b7f..e5eeb1e0c0a29e3e275f2b7e27410c03251d852d 100644 --- a/src/box/replication.cc +++ b/src/box/replication.cc @@ -504,23 +504,25 @@ replicaset_update(struct applier **appliers, int count) */ /* Prune old appliers */ - replicaset_foreach(replica) { - if (replica->applier == NULL) - continue; + while (!rlist_empty(&replicaset.anon)) { + replica = rlist_first_entry(&replicaset.anon, + typeof(*replica), in_anon); applier = replica->applier; replica_clear_applier(replica); - replica->applier_sync_state = APPLIER_DISCONNECTED; + rlist_del_entry(replica, in_anon); + replica_delete(replica); applier_stop(applier); applier_delete(applier); } - rlist_foreach_entry_safe(replica, &replicaset.anon, in_anon, next) { + replicaset_foreach(replica) { + if (replica->applier == NULL) + continue; applier = replica->applier; replica_clear_applier(replica); - replica_delete(replica); + replica->applier_sync_state = APPLIER_DISCONNECTED; applier_stop(applier); applier_delete(applier); } - rlist_create(&replicaset.anon); /* Save new appliers */ replicaset.applier.total = count;