summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/voicecall.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/voicecall.c b/src/voicecall.c
index d52428f8..dbf3e9ad 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 {
@@ -1092,9 +1093,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);
@@ -1115,6 +1125,9 @@ static struct voicecall *dial_handle_result(struct ofono_voicecall *vc,
*need_to_emit = TRUE;
+handled:
+ v->dial_result_handled = TRUE;
+
return v;
}