diff options
-rw-r--r-- | src/voicecall.c | 19 |
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; } |