[PATCH 3/4] Fix: Avoid release dialing call when call is 0
Zhenhua Zhang
zhenhua.zhang at intel.com
Mon Nov 16 06:12:21 PST 2009
If +CIEV call goes to 0, we may have another dialing call. We
should not release this dialing call when call=0.
---
drivers/hfpmodem/voicecall.c | 23 +++++++++++++++++++++--
1 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/drivers/hfpmodem/voicecall.c b/drivers/hfpmodem/voicecall.c
index d9c3c2a..53d4fd1 100644
--- a/drivers/hfpmodem/voicecall.c
+++ b/drivers/hfpmodem/voicecall.c
@@ -590,10 +590,11 @@ static void ciev_call_notify(struct
ofono_voicecall *vc,
{
GSList *waiting;
GSList *incoming;
+ GSList *dialing;
/* 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 and dialing call is kept.
*/
waiting = g_slist_find_custom(vd->calls,
GINT_TO_POINTER(CALL_STATUS_WAITING),
@@ -612,8 +613,26 @@ static void ciev_call_notify(struct ofono_voicecall
*vc,
if (incoming)
vd->calls = g_slist_remove_link(vd->calls, incoming);
+ /* The dialing call should be kept dialing */
+ dialing = g_slist_find_custom(vd->calls,
+ GINT_TO_POINTER(CALL_STATUS_DIALING),
+ at_util_call_compare_by_status);
+
+ if (!dialing)
+ dialing = g_slist_find_custom(vd->calls,
+ GINT_TO_POINTER(
+ CALL_STATUS_ALERTING),
+ at_util_call_compare_by_status);
+
+ if (dialing)
+ vd->calls = g_slist_remove_link(vd->calls, dialing);
+
release_all_calls(vc);
- vd->calls = incoming;
+
+ if (incoming)
+ vd->calls = incoming;
+ else if (dialing)
+ vd->calls = dialing;
break;
}
--
1.6.2.5
More information about the ofono
mailing list