diff options
author | Denis Kenzior <denkenz@gmail.com> | 2009-06-12 00:19:14 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-06-12 21:39:07 -0500 |
commit | 46ac5c564c0fdbbe196b8d2a549983263779e20e (patch) | |
tree | a9b0c7397c8cd7070bdc59df5551dc012d53935d /src | |
parent | 3a7164c0e7c8fd0ab20579eca427a244b23fd559 (diff) | |
download | ofono-46ac5c564c0fdbbe196b8d2a549983263779e20e.tar.bz2 |
Do not use chld=1 on mpty when another held
If we're trying to hangup an active MPTY call, and we have
calls on hold we shouldn't use CHLD=1 (release_all_active)
since this will have the side-effect of activating the held
calls
Diffstat (limited to 'src')
-rw-r--r-- | src/voicecall.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/voicecall.c b/src/voicecall.c index 541419cc..7d7f3e35 100644 --- a/src/voicecall.c +++ b/src/voicecall.c @@ -1010,22 +1010,33 @@ static DBusMessage *multiparty_hangup(DBusConnection *conn, calls->flags |= VOICECALLS_FLAG_PENDING; calls->pending = dbus_message_ref(msg); - /* We have waiting calls, can't use +CHLD to release */ - if (voicecalls_have_waiting(calls)) { - calls->flags |= VOICECALLS_FLAG_MULTI_RELEASE; - voicecalls_release_queue(modem, calls->multiparty_list); - voicecalls_release_next(modem); - } else { + /* We don't have waiting calls, as we can't use +CHLD to release */ + if (!voicecalls_have_waiting(calls)) { struct voicecall *v = calls->multiparty_list->data; - if (v->call->status == CALL_STATUS_HELD) + if (v->call->status == CALL_STATUS_HELD) { calls->ops->release_all_held(modem, generic_callback, calls); - else + goto out; + } + + /* Multiparty is currently active, if we have held calls + * we shouldn't use release_all_active here since this also + * has the side-effect of activating held calls + */ + if (!voicecalls_have_held(calls)) { calls->ops->release_all_active(modem, generic_callback, - calls); + calls); + goto out; + } } + /* Fall back to the old-fashioned way */ + calls->flags |= VOICECALLS_FLAG_MULTI_RELEASE; + voicecalls_release_queue(modem, calls->multiparty_list); + voicecalls_release_next(modem); + +out: return NULL; } |