Fix: Don't drop dialing calls when call=0 signaled

This commit is contained in:
Denis Kenzior 2009-11-16 11:45:03 -06:00
parent 77b3048325
commit 1c3d41fafc
1 changed files with 12 additions and 23 deletions

View File

@ -626,36 +626,25 @@ static void ciev_call_notify(struct ofono_voicecall *vc,
switch (value) {
case 0:
{
GSList *waiting;
GSList *incoming;
/* If call goes to 0, then we have no held or active calls
* in the system. The waiting calls are promoted to incoming
* calls
* calls, dialing calls are kept. This also handles the
* situation when dialing and waiting calls exist
*/
waiting = g_slist_find_custom(vd->calls,
GINT_TO_POINTER(CALL_STATUS_WAITING),
at_util_call_compare_by_status);
release_with_status(vc, CALL_STATUS_HELD);
release_with_status(vc, CALL_STATUS_ACTIVE);
if (waiting) {
incoming = waiting;
call = waiting->data;
call->status = CALL_STATUS_INCOMING;
ofono_voicecall_notify(vc, call);
} else
incoming = g_slist_find_custom(vd->calls,
GINT_TO_POINTER(CALL_STATUS_INCOMING),
at_util_call_compare_by_status);
/* Promote waiting to incoming if it is the last call */
if (vd->calls && vd->calls->next == NULL) {
call = vd->calls->data;
if (incoming)
vd->calls = g_slist_remove_link(vd->calls, incoming);
release_all_calls(vc);
vd->calls = incoming;
if (call->status == CALL_STATUS_WAITING) {
call->status = CALL_STATUS_INCOMING;
ofono_voicecall_notify(vc, call);
}
}
break;
}
case 1:
{