MT#57118 Refactoring of `monologue_delete_iter`

Deprecate usage of the bit flags for return.

And instead do:
- only return true/false for the redis update
- check if we have to destroy the whole call using the
  `call_monologues_associations_left()` only

Additionally remove unused variables.

Change-Id: Ie858c533d1aa4b74024d65c7064aa56437389882
pull/1646/head
Donat Zenichev 3 years ago
parent f4eb2d5a26
commit 0ce16c7e20

@ -4266,21 +4266,19 @@ static void __tags_unassociate(struct call_monologue *a, struct call_monologue *
g_hash_table_remove(b->associated_tags, a);
}
/* marks the monologue for destruction, or destroys it immediately */
/* iterates associated monologues and does the same */
/* returns a bit field of: 0x1 = some branches are left, don't destroy call
* 0x2 = update Redis
/**
* Marks the monologue for destruction, or destroys it immediately.
* It also iterates through the associated monologues and does the same for them.
*
* Returns `true`, if we need to update Redis.
*/
static unsigned int monologue_delete_iter(struct call_monologue *a, int delete_delay) {
static bool monologue_delete_iter(struct call_monologue *a, int delete_delay) {
struct call *call = a->call;
if (!call)
return 0;
unsigned int ml_associated_count = g_hash_table_size(a->associated_tags);
unsigned int call_monologues_count = g_queue_get_length(&call->monologues);
GList *associated = g_hash_table_get_values(a->associated_tags);
unsigned int ret = 0;
bool update_redis = false;
if (delete_delay > 0) {
ilog(LOG_INFO, "Scheduling deletion of call branch '" STR_FORMAT_M "' "
@ -4294,7 +4292,7 @@ static unsigned int monologue_delete_iter(struct call_monologue *a, int delete_d
ilog(LOG_INFO, "Deleting call branch '" STR_FORMAT_M "' (via-branch '" STR_FORMAT_M "')",
STR_FMT_M(&a->tag), STR_FMT0_M(&a->viabranch));
monologue_destroy(a);
ret |= 0x2;
update_redis = true;
}
/* Look into all associated monologues: cascade deletion to those,
@ -4303,14 +4301,13 @@ static unsigned int monologue_delete_iter(struct call_monologue *a, int delete_d
{
struct call_monologue *b = l->data;
__tags_unassociate(a, b);
if (g_hash_table_size(b->associated_tags) == 0)
ret |= monologue_delete_iter(b, delete_delay); /* schedule deletion of B */
else
ret |= 0x1;
monologue_delete_iter(b, delete_delay); /* schedule deletion of B */
}
g_list_free(associated);
return ret;
return update_redis;
}
/**
@ -4673,7 +4670,7 @@ do_delete:
/* check, if we have some associated monologues left, which have own associations
* which means they need a media to flow */
unsigned int del_ret = monologue_delete_iter(ml, delete_delay);
update = monologue_delete_iter(ml, delete_delay);
/* if there are no associated dialogs, which still require media, then additionally
* ensure, whether we can afford to destroy the whole call now.
@ -4681,10 +4678,9 @@ do_delete:
bool del_stop = false;
del_stop = call_monologues_associations_left(c);
if ((del_ret & 0x2))
update = true;
if (!(del_ret & 0x1) && !del_stop)
if (!del_stop)
goto del_all;
goto success_unlock;
del_all:

Loading…
Cancel
Save