From bab23b39767b664061ac2bcba747fe2b96561ca7 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Fri, 13 Aug 2010 10:57:20 -0500 Subject: voicecall: Make hangup_all work for 911 calls --- src/voicecall.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/voicecall.c b/src/voicecall.c index 5a803f78..4b4d3143 100644 --- a/src/voicecall.c +++ b/src/voicecall.c @@ -793,14 +793,25 @@ static void voicecalls_release_next(struct ofono_voicecall *vc) vc->release_list = g_slist_remove(vc->release_list, call); - if (vc->driver->hangup_active != NULL && - (call->call->status == CALL_STATUS_ALERTING || - call->call->status == CALL_STATUS_DIALING || - call->call->status == CALL_STATUS_INCOMING)) + if (vc->driver->hangup_active == NULL) + goto fallback; + + if (call->call->status == CALL_STATUS_ACTIVE && + voicecalls_num_active(vc) == 1) { vc->driver->hangup_active(vc, multirelease_callback, vc); - else - vc->driver->release_specific(vc, call->call->id, - multirelease_callback, vc); + return; + } + + if (call->call->status == CALL_STATUS_ALERTING || + call->call->status == CALL_STATUS_DIALING || + call->call->status == CALL_STATUS_INCOMING) { + vc->driver->hangup_active(vc, multirelease_callback, vc); + return; + } + +fallback: + vc->driver->release_specific(vc, call->call->id, + multirelease_callback, vc); } static DBusMessage *manager_get_properties(DBusConnection *conn, -- cgit v1.2.3