diff --git a/daemon/call.c b/daemon/call.c index 9bdf9e299..de7eb641c 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1844,6 +1844,9 @@ void call_destroy(struct call *c) { rwlock_lock_w(&m->hashlock); ret = g_hash_table_remove(m->callhash, &c->callid); + if (IS_BACKUP_CALL(c)) { + atomic64_dec(&m->stats.foreign_sessions); + } if(!IS_BACKUP_CALL(c)) { mutex_lock(&m->totalstats_interval.managed_sess_lock); m->totalstats_interval.managed_sess_min = MIN(m->totalstats_interval.managed_sess_min, @@ -1861,10 +1864,6 @@ void call_destroy(struct call *c) { redis_delete(c, m->conf.redis_write); } - if (c->redis_foreign_call) { - atomic64_dec(&m->stats.foreign_sessions); - } - rwlock_lock_w(&c->master_lock); /* at this point, no more packet streams can be added */ diff --git a/daemon/redis.c b/daemon/redis.c index 0f8e1acee..e5ef18a7d 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -316,14 +316,13 @@ void onRedisNotification(redisAsyncContext *actx, void *reply, void *privdata) { goto err; } redis_restore_call(r, cm, rr->element[2]); - atomic64_inc(&cm->stats.foreign_sessions); - atomic64_inc(&cm->totalstats.total_foreign_sessions); - // we lookup again to retrieve the call to insert the kayspace db id c = g_hash_table_lookup(cm->callhash, &callid); if (c) { c->redis_foreign_call = 1; c->is_backup_call = 1; + atomic64_inc(&cm->stats.foreign_sessions); + atomic64_inc(&cm->totalstats.total_foreign_sessions); } }