Closed Bug 1175510 Opened 9 years ago Closed 9 years ago

Crash when running the DT2 demo

Categories

(Core :: Audio/Video, defect)

defect
Not set
critical

Tracking

()

RESOLVED FIXED
mozilla42
Tracking Status
firefox40 --- unaffected
firefox41 + fixed
firefox42 --- fixed

People

(Reporter: bbouvier, Assigned: padenot)

References

Details

(Keywords: crash, regression, Whiteboard: [games])

Crash Data

Attachments

(1 file, 3 obsolete files)

STR:
- http://beta.unity3d.com/jonas/DT2/
- click play (no matter which one)

Observed:
Crash!

Some crash reports of mine:
bp-1b86e5e5-c646-45dc-afdb-1ca7e2150617
bp-08aacd1c-6220-445e-85fd-d5d1c2150617

Someone tested that and confirmed the crash:
bp-6be4613f-2741-4278-bfd8-7f1542150617
Whiteboard: [games]
[Tracking Requested - why for this release]:
Severity: normal → critical
Keywords: crash
Adding a tracking flag for FF41. This does not repro on FF40.0a2 (2015-06-03).

Added links in crash signature field.
Crash Signature: https://crash-stats.mozilla.com/report/index/1b86e5e5-c646-45dc-afdb-1ca7e2150617 https://crash-stats.mozilla.com/report/index/08aacd1c-6220-445e-85fd-d5d1c2150617
Crash Signature: https://crash-stats.mozilla.com/report/index/1b86e5e5-c646-45dc-afdb-1ca7e2150617 https://crash-stats.mozilla.com/report/index/08aacd1c-6220-445e-85fd-d5d1c2150617 → [@ mozilla::MediaStream::GraphImpl()]
Yeah we should null-check or something. I'll get to it on the plane tomorrow.
Assignee: nobody → padenot
Oops we need to null-check here, this can be called from the CC.
Attachment #8625165 - Flags: review?(karlt)
Attachment #8625157 - Attachment is obsolete: true
Attachment #8625157 - Flags: review?(karlt)
Comment on attachment 8625165 [details] [diff] [review]
Update the AudioBufferSourceNode <=> PannerNode mapping when destroying AudioNodeStream. r=

This approach looks good thanks, but should be adjusted to avoid adding inefficiency.

>+  // Maybe we are destroying an AudioBufferSourceNode's stream. Update the
>+  // panner <-> source mapping so we don't try to send the doppler to a
>+  // destroyed stream.
>+  if (Context()) {
>+    Context()->UpdatePannerSource();
>+  }

UpdatePannerSource() is not O(1) so this could be expensive if done for every
node.  It should be moved to AudioBufferSourceNode::DestroyMediaStream()
override so that it is not called more often than currently.

I would call UnregisterAudioBufferSourceNode() because UpdatePannerSource() is
an implementation detail.

The calls to UnregisterAudioBufferSourceNode() from ~AudioBufferSourceNode()
and the AudioBufferSourceNode unlink code can now be removed, because
DisconnectFromGraph() calls DestroyMediaStream(), and DisconnectFromGraph() is
called from AudioBufferSourceNode unlink code and from AudioNode::Release().
Attachment #8625165 - Flags: review?(karlt) → review-
Is this what you had in mind ?
Attachment #8628272 - Flags: review?(karlt)
Attachment #8625165 - Attachment is obsolete: true
The previous fix was wrong and not complete. First I was updating the
panner/node mapping right before destroying the stream, so the changes would not
have been picked up.

Then, we are computing the panner/source mapping using node connections, and not
stream connections, because we're on the main thread, so we need to check if the
node has a stream when deciding if a node is to be registered (nodes that don't
have streams are finished, so it's okay to not adjust their doppler shift).

With this, I've verified that the crash in comment 0 is fixed.
Attachment #8628608 - Flags: review?(karlt)
Attachment #8628272 - Attachment is obsolete: true
Attachment #8628272 - Flags: review?(karlt)
Comment on attachment 8628608 [details] [diff] [review]
Update the AudioBufferSourceNode <=> PannerNode mapping when destroying AudioNodeStream. r=

>+    // Check if this node is an AudioBufferSourceNode that still have a stream,
>+    // which means it is still playing.

Can you reword this please so as not to imply that it has necessarily started playing?  Perhaps just "it has not finished playing".
Attachment #8628608 - Flags: review?(karlt) → review+
Blocks: 1179662
crashtest in bug 1179662
Flags: in-testsuite-
https://hg.mozilla.org/mozilla-central/rev/8b10b297cec0
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla42
Comment on attachment 8628608 [details] [diff] [review]
Update the AudioBufferSourceNode <=> PannerNode mapping when destroying AudioNodeStream. r=

Approval Request Comment
[Feature/regressing bug #]: bug 974089
[User impact if declined]: crash running game
[Describe test coverage new/current, TreeHerder]: added new crashtest
[Risks and why]:
There is perhaps a small risk of ownership but the code is not so complex, so I don't think we've missed anything.
[String/UUID change made/needed]: none.
Attachment #8628608 - Flags: approval-mozilla-aurora?
Comment on attachment 8628608 [details] [diff] [review]
Update the AudioBufferSourceNode <=> PannerNode mapping when destroying AudioNodeStream. r=

Approving for uplift to Aurora. A crash test was added to verify the fix.
Attachment #8628608 - Flags: approval-mozilla-aurora? → approval-mozilla-aurora+
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: