Open Bug 1399318 Opened 7 years ago Updated 2 years ago

Assertion failure: IsValid() && aOther.IsValid(), at firefox-debug/dist/include/TimeUnits.h:138

Categories

(Core :: Audio/Video: Playback, defect, P5)

57 Branch
defect

Tracking

()

Tracking Status
firefox56 --- unaffected
firefox57 - affected

People

(Reporter: bc, Unassigned)

References

()

Details

(Keywords: assertion)

Attachments

(1 file)

Attached file Linux Debug log
[Tracking Requested - why for this release]:

1. https://www.indy100.com/article/eu-flag-uk-burning-regulations-flame-retardant-article-50-brexit-7657391

2. Assertion failure: IsValid() && aOther.IsValid(), at /mozilla/builds/nightly/mozilla/firefox-debug/dist/include/TimeUnits.h:138
#01: mozilla::media::TimeUnit::operator<=(mozilla::media::TimeUnit const&) const (/mozilla/builds/nightly/mozilla/firefox-debug/dist/include/TimeUnits.h:138 (discriminator 3))
#02: mozilla::TrackBuffersManager::ProcessFrames(nsTArray<RefPtr<mozilla::MediaRawData> >&, mozilla::TrackBuffersManager::TrackData&) (/mozilla/builds/nightly/mozilla/dom/media/mediasource/TrackBuffersManager.cpp:1577)
#03: mozilla::TrackBuffersManager::CompleteCodedFrameProcessing() (:?)
#04: mozilla::TrackBuffersManager::OnAudioDemuxCompleted(RefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>) (:?)
#05: mozilla::MozPromise<RefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::MediaResult, true>::ThenValue<mozilla::TrackBuffersManager*, void (mozilla::TrackBuffersManager::*)(RefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>), void (mozilla::TrackBuffersManager::*)(mozilla::MediaResult const&)>::DoResolveOrRejectInternal(mozilla::MozPromise<RefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::MediaResult, true>::ResolveOrRejectValue&) (:?)
#06: RefPtr<mozilla::MozPromise<RefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::MediaResult, true>::ThenValueBase>::assign_assuming_AddRef(mozilla::MozPromise<RefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::MediaResult, true>::ThenValueBase*) (/mozilla/builds/nightly/mozilla/firefox-debug/dist/include/mozilla/RefPtr.h:63)

Windows/Linux Nightly 57 at least. Reproduced with a Linux build from today: https://hg.mozilla.org/mozilla-central/rev/b0e945eed81db8bf076daf64e381c514f70144f0 but this goes back to at least 2017-09-02. Doesn't crash opt build on Linux fwiw.

I could not reproduce with a local Beta build on Fedora however -> regression.
On the assumption this only affects debug builds I won't track this for 57.  We can reconsider if it turns out this causes more user-visible problems.
this isn't a regression. The code has always been there.

the assertion is only on debug release, it only shows that the media content is rubbish with samples having a negative time (end < start)
Component: Audio/Video → Audio/Video: Playback
Priority: -- → P5
In this case, the issue happens in [1]:
> 1576:   if (needDiscontinuityCheck && trackBuffer.mLastDecodeTimestamp.isSome() &&
> 1577:       (decodeTimestamp < trackBuffer.mLastDecodeTimestamp.ref() ||
> 1578:        (decodeTimestamp - trackBuffer.mLastDecodeTimestamp.ref()
> 1579:         > trackBuffer.mLongestFrameDuration * 2))) {

decodeTimestamp = 9898666
mLastDecodeTimestamp = -9223372036844877142 (which is close to -(2^63))
The difference overflows int64, so it's an invalid CheckedInt64, which triggers the assertion in `operator >`.

That's as far as I got.
Not sure if the solution should be to check the difference at line 1578 before going further, or somehow notice that mLastDecodeTimestamp is just bad.
Maybe `TimeUnit::operator >` should accept invalid numbers, and maybe return something like a `Maybe<bool>`?

[1] http://searchfox.org/mozilla-central/rev/6326724982c66aaeaf70bb7c7ee170f7a38ca226/dom/media/mediasource/TrackBuffersManager.cpp#1576-1579
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: