From 1c3d41fafc1e1001d5227b00e17d8dc3e46273eb Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Mon, 16 Nov 2009 11:45:03 -0600 Subject: [PATCH] Fix: Don't drop dialing calls when call=0 signaled --- drivers/hfpmodem/voicecall.c | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/drivers/hfpmodem/voicecall.c b/drivers/hfpmodem/voicecall.c index 323893b..3591b74 100644 --- a/drivers/hfpmodem/voicecall.c +++ b/drivers/hfpmodem/voicecall.c @@ -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); - - if (incoming) - vd->calls = g_slist_remove_link(vd->calls, incoming); + /* Promote waiting to incoming if it is the last call */ + if (vd->calls && vd->calls->next == NULL) { + call = vd->calls->data; - 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: { -- 2.7.4