From: Pekka Pessi <[email protected]>
The existing call will be automatically put on hold if there is an
existing active call when dialing. On some modems the dial request
returns only after the dialed call is active and the existing call has
been put on hold.
However, on isimodem driver the dial request returns immediately before
the existing call has changed its status. With isimodem driver the
dial_handle_result() selected the existing call from the list when it
should have created a new one.
The dial result handling now guards againt returning a previously dialed
active call as result.
---
src/voicecall.c | 19 ++++++++++++++++---
1 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/src/voicecall.c b/src/voicecall.c
index 52baec3..d03ac2e 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,18 @@ 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)
- return v;
+ v->call->status == CALL_STATUS_ALERTING)
+ goto handled;
+
+ /*
+ * 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)
+ goto handled;
}
call = synthesize_outgoing_call(vc, number);
@@ -1119,6 +1129,9 @@ static struct voicecall *dial_handle_result(struct
ofono_voicecall *vc,
*need_to_emit = TRUE;
+handled:
+ v->dial_result_handled = TRUE;
+
return v;
}
--
1.7.1
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono