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

Loading…
Cancel
Save