From: Pekka Pessi <pekka.pe...@nokia.com>

If there is an existing active call when dialing the existing call will
be automatically put on hold. The dialing result handling depended on
the voicecall driver putting the call on hold before the dial command
callback is called.

However, this is not true on isimodem driver, where the dial request
returns immediately before the existing call have changed its
status. The dial result handling now checks if the active call has been
resulted from the dial request.
---
 src/voicecall.c |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/voicecall.c b/src/voicecall.c
index bd64432..e3ce2a5 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -68,6 +68,7 @@ struct voicecall {
        char *message;
        uint8_t icon_id;
        gboolean untracked;
+       gboolean dial_result_handled;
 };
 
 struct dial_request {
@@ -1096,9 +1097,20 @@ static struct voicecall *dial_handle_result(struct 
ofono_voicecall *vc,
                v = l->data;
 
                if (v->call->status == CALL_STATUS_DIALING ||
-                               v->call->status == CALL_STATUS_ALERTING ||
-                               v->call->status == CALL_STATUS_ACTIVE)
+                               v->call->status == CALL_STATUS_ALERTING)
                        return v;
+
+               /*
+                * Dial request may return before existing active call
+                * is put on hold or after dialed call has got active
+                */
+               if (v->call->status == CALL_STATUS_ACTIVE &&
+                               v->call->direction ==
+                               CALL_DIRECTION_MOBILE_ORIGINATED &&
+                               !v->dial_result_handled) {
+                       v->dial_result_handled = TRUE;
+                       return v;
+               }
        }
 
        call = synthesize_outgoing_call(vc, number);
@@ -1119,6 +1131,8 @@ static struct voicecall *dial_handle_result(struct 
ofono_voicecall *vc,
 
        *need_to_emit = TRUE;
 
+       v->dial_result_handled = TRUE;
+
        return v;
 }
 
-- 
1.7.1

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to