commit - 9245750c559a7ba179ce356489a4b77c65f51e68
commit + 18e79a83874d1e94514f4eba3321718ba97fde9a
blob - 7ab2df9f312491186e925401c0ee5b96655d76f6
blob + e7fc201d86eec5b47f068d3f553466e002052f55
--- src/box/gc.c
+++ src/box/gc.c
static void
gc_schedule_cleanup(void)
{
+ if (gc.cleanup_fiber == NULL)
+ return;
/*
* Do not wake up the background fiber if it's executing
* the garbage collection procedure right now, because
blob - 0d3006463e97dd9f707946d7132ded0a578bff00
blob + e50fc0c637d14a23f3b2c27f0d50adafe277044a
--- src/box/replication.cc
+++ src/box/replication.cc
enum replicaset_state replicaset_state = REPLICASET_BOOTSTRAP;
+/** Free replica resources. */
+static void
+replica_delete(struct replica *replica);
+
static int
replica_compare_by_uuid(const struct replica *a, const struct replica *b)
{
void
replication_free(void)
{
+ struct replica *replica, *next;
+ while (!rlist_empty(&replicaset.anon)) {
+ replica = rlist_shift_entry(&replicaset.anon,
+ typeof(*replica), in_anon);
+ replica_delete(replica);
+ }
+ replica_hash_foreach_safe(&replicaset.hash, replica, next) {
+ replica_hash_remove(&replicaset.hash, replica);
+ replica_delete(replica);
+ }
diag_destroy(&replicaset.applier.diag);
trigger_destroy(&replicaset.on_ack);
trigger_destroy(&replicaset.on_relay_thread_start);
static void
replica_delete(struct replica *replica)
{
- assert(replica_is_orphan(replica));
if (replica->relay != NULL)
relay_delete(replica->relay);
+ if (replica->applier != NULL)
+ applier_delete(replica->applier);
if (replica->gc != NULL)
gc_consumer_unregister(replica->gc);
TRASH(replica);