Closed
Bug 960507
Opened 11 years ago
Closed 11 years ago
Follow up to bug 948975 Multi-party call frozen when receiving and finishing a new incoming call
Categories
(Firefox OS Graveyard :: Gaia::Dialer, defect)
Tracking
(blocking-b2g:1.3+, b2g18 unaffected, b2g-v1.1hd unaffected, b2g-v1.2 wontfix, b2g-v1.3 fixed, b2g-v1.4 fixed)
Tracking | Status | |
---|---|---|
b2g18 | --- | unaffected |
b2g-v1.1hd | --- | unaffected |
b2g-v1.2 | --- | wontfix |
b2g-v1.3 | --- | fixed |
b2g-v1.4 | --- | fixed |
People
(Reporter: isabelrios, Assigned: gsvelto)
References
Details
Attachments
(6 files, 1 obsolete file)
Reproduced on both, 1.2 and 1.3 buri builds
-1.2 01/16 build:
Gecko-4ab7427
Gaia-539a25e
-1.3 01/16 build:
Gecko-0f53789
Gaia-423326d
STR:
1. Start a multicall (2 parties involved)
2. Join all the calls
3. Receive a new call. Previous multicall is on hold
4. Finish the latest incoming call received
ACTUAL
Different behaviour depending on the build:
1.2:
After step 4, the multi-call seems to be frozen as in the attached, but tapping on 'Gruop call' it is recovered correctly.
1.3:
After step 3, the device shows 'Call ended' although the call is stablished ok (see new screenshot attached) The screen is frozen, also the dialer app itself, it is necessary to power the device off and on to get it working back.
EXPECTED
The managment of the calls should work fine.
Updated•11 years ago
|
Assignee: nobody → anthony
Flags: needinfo?(anthony)
Comment 3•11 years ago
|
||
assuming 1.3+ is the top priority in this sprint, i am adding target milestone here. please correct the target milestone directly if you feel it does not reflect your work. Thanks
Target Milestone: --- → 1.3 C3/1.4 S3(31jan)
Updated•11 years ago
|
Keywords: regressionwindow-wanted
Comment 4•11 years ago
|
||
We can repro this issue but only on older base images. After updating to either the 20131209 or the v1.2-deivce.cfg the issue no longer reproduces. NI Isabel to find out what base she was using to get the issue to occur.
See bug 946168 and bug 948982, similar issues that were report in the past that were fixed using a newer base.
Flags: needinfo?(isabelrios)
Comment 5•11 years ago
|
||
I can reproduce with a newer base image. But the reproduction is not 100%. I think we have a timing issue with the "Call ended" messages but that's just a gut feeling.
Reporter | ||
Comment 6•11 years ago
|
||
Hi Sarah,
When I filed this bug I was already using that base image: v1.2-deivce.cfg
Thanks
Flags: needinfo?(isabelrios)
Comment 7•11 years ago
|
||
Do you have a 100% repro on this? Can you make a video so I can see if the timing of those STRs matches mine?
Flags: needinfo?(isabelrios)
Reporter | ||
Comment 8•11 years ago
|
||
Hi Anthony,
With today's 1.3 build:
Gecko-6840e8c
Gaia-744fb69
Attached a video file reproducing the problem.
Flags: needinfo?(isabelrios)
Reporter | ||
Comment 9•11 years ago
|
||
Updated•11 years ago
|
QA Contact: mvaughan
Comment 10•11 years ago
|
||
I cannot reproduce anymore :( It's really weird.
Isabel: I see on your video that we have a "Unable to merge calls" banner showing up. Is that happening all the time or was it just because you tapped several times on the merge button?
Sidenote: The first call is cropped under the status bar, that's bug 959660. bug 960056 is for the + button misbehaving.
Comment 11•11 years ago
|
||
This issue reproduces for me on the 01/23/14 1.3 build.
This issue appears to have started reproducing on the 11/28/13 1.3 build. On builds before 11/29, there is no freezing and the user can end calls. The only issue is that the user cannot resume the group call so they have to end the call and start it again.
- Works -
Device: Buri v1.3 MOZ RIL
BuildID: 20131128040201
Gaia: 0d57ec2801ae125ec855a19cf956ab118660d694
Gecko: a5e7f611546f
Version: 28.0a1
Firmware Version: V1.2-device.cfg
- Broken -
Device: Buri v1.3 MOZ RIL
BuildID: 20131129053350
Gaia: 09d1f63762aaf645b5b6642d218b40f069b77562
Gecko: e9337081c744
Version: 28.0a1
Firmware Version: V1.2-device.cfg
Keywords: regressionwindow-wanted
Reporter | ||
Comment 12•11 years ago
|
||
(In reply to Anthony Ricaud (:rik) from comment #10)
> I cannot reproduce anymore :( It's really weird.
>
> Isabel: I see on your video that we have a "Unable to merge calls" banner
> showing up. Is that happening all the time or was it just because you tapped
> several times on the merge button?
>
> Sidenote: The first call is cropped under the status bar, that's bug 959660.
> bug 960056 is for the + button misbehaving.
Hi Anthony,
The call is correctly merged, it should had appeared because I had to tap several times to get the calls merged.
Sometimes, instead of the 'Call ended' message, I also reproduce the screen seen on the new attachment. It happens just when receiving the incoming call (Step 3). The management of that new incoming call is not working and make the conference call to stop working.
Reporter | ||
Comment 13•11 years ago
|
||
Comment 14•11 years ago
|
||
I was doing a git bisect to find the problematic commit but I just lost adb on a version with a broken settings app. I need to flash it again from scratch. I'll do that on Monday.
Comment 15•11 years ago
|
||
My bisection is saying that a2e63ba7d798eb935392a5976dd2ff3f2b9d9337 is the commit that introduced the regression. Bug 933153.
Comment 16•11 years ago
|
||
So I think this is a TelephonyAPI issue.
Since bug 933153, we hold the active call before calling the second one. In that case, when we answer the 3rd call, we get an extra onCallsChanged event. That's unexpected but our Gaia code shouldn't mind.
On top of that unexpected event, in the event handler, we have a comparison that fails. We compare each call known by Gaia with each call in the TelephonyAPI [1]. And for the second call, we have hc.call.number == call.number but hc.call != call.
We can solve this bug by changing the Gaia logic to be more robust but I believe this should be solved in the TelephonyAPI.
[1] https://github.com/mozilla-b2g/gaia/blob/61866f17977a440a3297aa8ade8f410c68d2cdd7/apps/communications/dialer/js/calls_handler.js#L146
Comment 17•11 years ago
|
||
Thomas: I'm reassigning to you because Taipei is on holidays and David told me you'd be the one taking a look. Feel free to ask me for more details if my explanation is not clear.
Assignee: anthony → tzimmermann
Comment 18•11 years ago
|
||
Hi Anthony,
I haven't worked on ril for a while, so I'm not up to speed with this. But I'll prioritize this bug and work on it at least until the people in Taipeh are back from vacation.
Comment 19•11 years ago
|
||
You can use this patch to exhibit the issue I explained in comment 16.
Comment 20•11 years ago
|
||
I cannot reproduce the issue, because my SIMs don't support multiparty calls. When I try to do call #2 I see the error message below.
> Hold non-connected call ignored! mNumber=+xxxxxxxxx mSecondNumber= mState=holding mCallState=5 mCallIndex=1: file /home/mozilla/Projects/mozilla/src/mozilla-central/dom/telephony/TelephonyCall.cpp, line 260
I think the phone tries to hold the first call, which is also not supported by the SIM.
Comment hidden (obsolete) |
Assignee | ||
Comment 22•11 years ago
|
||
OK, scratch my previous comment, I've managed to reproduce exactly the same issue, the RIL error messages I had found in the log are apparently unrelated.
Comment 23•11 years ago
|
||
Also, if you want to see the behaviour without the issue, you can comment https://github.com/mozilla-b2g/gaia/blob/d8bdd6e84ccbb9027f811e42373cbdd53977980a/apps/communications/dialer/js/telephony_helper.js#L32-L42 except line 33-34. It will not hold the first call before making the second one.
Assignee | ||
Comment 24•11 years ago
|
||
OK, looking at the sequence of oncallschanged events there's something weird happening that Anthony diagnosed correctly in comment 16. Here's the sequence of oncallschanged events with the state of telephony.calls being trackerd:
* Dialing the first call
onCallsChanged() telephony.calls.length = 1
call[0] = {
serviceId = 0
number = 11111111
state = dialing
group = null
}
* First call answered
onCallsChanged() telephony.calls.length = 1
call[0] = {
serviceId = 0
number = 11111111
state = dialing
group = null
}
* Dialing the second call
onCallsChanged() telephony.calls.length = 2
call[0] = {
serviceId = 0
number = 11111111
state = connected
group = null
}
call[1] = {
serviceId = 0
number = 22222222
state = dialing
group = null
}
* Second call answered
onCallsChanged() telephony.calls.length = 1
call[0] = {
serviceId = 0
number = 22222222
state = connected
group = null
}
* Grouped calls
onCallsChanged() telephony.calls.length = 1
call[0] = {
serviceId = 0
number = 22222222
state = connected
group = [object TelephonyCallGroup]
}
* Third call comes in, telephony.calls appears empty (is the grouped call held?)
onCallsChanged() telephony.calls.length = 0
* Here's the incoming third call
onCallsChanged() telephony.calls.length = 1
call[0] = {
serviceId = 0
number = 33333333
state = incoming
group = null
}
* The original grouped call reappears, but it's a different object, its 'group' field is not set and it's in the dialing state (huh?)
onCallsChanged() telephony.calls.length = 2
call[0] = {
serviceId = 0
number = 33333333
state = incoming
group = null
}
call[1] = {
serviceId = 0
number = 22222222
state = dialing
group = null
}
* Finally it disappears again, the third call seems to be answered correctly (I can see it on the phone I used to make it) but that's not reflected by the oncallschanged event, the call state remains 'incoming'
onCallsChanged() telephony.calls.length = 1
call[0] = {
serviceId = 0
number = 33333333
state = incoming
group = null
}
I'll have to look at our telephony code because either we're interpreting incorrectly what we get within the oncallschanged events or we're just getting weird events we cannot possibly deal with.
Assignee | ||
Comment 25•11 years ago
|
||
I've figured out another detail. When the third call is answered the first two calls go into the 'held' state; this is expected because we're calling hold on the group call. However when the group call comes back (the mysterious fourth call appearing in telephony.calls) it's in the 'dialing' state while the two calls which should be tied to it are still on hold ('held' state). At this stage everything goes *boom*. Now digging in Gecko's telephony code to figure out where it's coming from.
Assignee | ||
Comment 26•11 years ago
|
||
I found an interesting bit while investigating the issue in the telephony code: when we accept the incoming third call we also try to dial the first number we called; this seems to point to an issue in Gaia rather than in the telephony code. Stay tuned for more telephony fun.
Assignee | ||
Comment 27•11 years ago
|
||
OK, I think I've nailed it, it seems that this line is not removing the onheld handler from the active call:
https://github.com/mozilla-b2g/gaia/blob/03f51ed669f2561e6348c1e862890569ddecf881/apps/communications/dialer/js/telephony_helper.js#L38
So it's invoked again when we accept the third incoming call and starts to dial the first number once again. I'm testing a one line patch that changes it from 'delete activeCall.onheld' to 'activeCall.onheld = null'. There's one thing that surprises me however and it's that I haven't seen Gecko complaining about us deleting the property of a DOM object. I always assumed you couldn't do that but maybe I haven't looked hard enough in the ginormous log I get when testing this.
Assignee | ||
Comment 28•11 years ago
|
||
I've verified a couple of different scenarios and it works fine. Can't believe it was this easy :-)
Attachment #8368609 -
Flags: review?(anthony)
Assignee | ||
Comment 29•11 years ago
|
||
Here's the pull request, the travis run is here:
https://travis-ci.org/mozilla-b2g/gaia/builds/17986368
Comment 30•11 years ago
|
||
Comment on attachment 8368609 [details] [diff] [review]
[PATCH] Properly remove the onheld event handler when doing a second call
Review of attachment 8368609 [details] [diff] [review]:
-----------------------------------------------------------------
Stealing, because I can see Rik hard at work on another bug.
r=me with the isUndefined changed to isNull in the telephony_helper_test.js file.
(otherwise the build won't be green anyway :))
Attachment #8368609 -
Flags: review?(anthony) → review+
Assignee | ||
Comment 31•11 years ago
|
||
Fixed the unit tests and squashed all jshint warnings for that file, carrying over the r+ flag. I've also updated the PR and the new Travis run is here:
https://travis-ci.org/mozilla-b2g/gaia/builds/17988461
Attachment #8368609 -
Attachment is obsolete: true
Attachment #8368628 -
Flags: review+
Comment 32•11 years ago
|
||
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Assignee | ||
Updated•11 years ago
|
status-b2g18:
--- → unaffected
status-b2g-v1.1hd:
--- → unaffected
status-b2g-v1.2:
--- → wontfix
status-b2g-v1.3:
--- → affected
status-b2g-v1.4:
--- → fixed
Assignee | ||
Comment 33•11 years ago
|
||
Cherry-picked and pushed to gaia/v1.3 9f1387a6f9d6ced1c170872fd5b209864b8cf859
Comment 34•11 years ago
|
||
Tested (02/03/2014) and working
1.3
Gecko e01ea79
Gaia f9a37c7
master
Gecko e392563
Gaia f192815
Status: RESOLVED → VERIFIED
Comment 35•11 years ago
|
||
Call waiting is inactive. Open a new bug
Comment 36•11 years ago
|
||
"Group Call" is inactive when received call is hung up. Still happen this (reported in description):
"1.2:
After step 4, the multi-call seems to be frozen as in the attached, but tapping on 'Gruop call' it is recovered correctly."
So, i open a new bug
Assignee | ||
Comment 37•11 years ago
|
||
(In reply to Loli from comment #36)
> "1.2:
> After step 4, the multi-call seems to be frozen as in the attached, but
> tapping on 'Gruop call' it is recovered correctly."
You mean that you're unable to switch between the grouped call and the new call? I am not sure if this is a bug or intended behavior, I'm unsure if switching between calls is possible once you're in conference mode.
Comment 38•11 years ago
|
||
(In reply to Gabriele Svelto [:gsvelto] from comment #37)
> (In reply to Loli from comment #36)
> > "1.2:
> > After step 4, the multi-call seems to be frozen as in the attached, but
> > tapping on 'Gruop call' it is recovered correctly."
>
> You mean that you're unable to switch between the grouped call and the new
> call? I am not sure if this is a bug or intended behavior, I'm unsure if
> switching between calls is possible once you're in conference mode.
I can switch between the grouped call, the problem is when received call is hung up, the group call isn't active and is necesary press in "group call". New bug open bug 966951
You need to log in
before you can comment on or make changes to this bug.
Description
•