Closed Bug 1182999 Opened 10 years ago Closed 10 years ago

MOZ_CRASH("Insertion Index Not Found")

Categories

(Core :: Audio/Video, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla42
Tracking Status
firefox42 --- fixed

People

(Reporter: jya, Assigned: jya)

References

Details

Attachments

(1 file)

Occurred when seeking back and forth in non buffered area. (lldb) bt * thread #100: tid = 0x6dc094, 0x0000000106813e42 XUL`mozilla::TrackBuffersManager::CheckNextInsertionIndex(this=0x000000014408d000, aTrackData=0x000000014408d290, aSampleTime=0x00000001443c5ce8) + 914 at TrackBuffersManager.cpp:1447, name = 'MediaPl~back #4', stop reason = EXC_BAD_ACCESS (code=1, address=0x0) * frame #0: 0x0000000106813e42 XUL`mozilla::TrackBuffersManager::CheckNextInsertionIndex(this=0x000000014408d000, aTrackData=0x000000014408d290, aSampleTime=0x00000001443c5ce8) + 914 at TrackBuffersManager.cpp:1447 frame #1: 0x000000010681394b XUL`mozilla::TrackBuffersManager::InsertFrames(this=0x000000014408d000, aSamples=0x00000001443c6250, aIntervals=0x00000001443c6410, aTrackData=0x000000014408d290) + 635 at TrackBuffersManager.cpp:1493 frame #2: 0x000000010681352c XUL`mozilla::TrackBuffersManager::ProcessFrames(this=0x000000014408d000, aSamples=0x000000014408d320, aTrackData=0x000000014408d290) + 4012 at TrackBuffersManager.cpp:1404 frame #3: 0x0000000106811e9f XUL`mozilla::TrackBuffersManager::CompleteCodedFrameProcessing(this=0x000000014408d000) + 895 at TrackBuffersManager.cpp:1134 frame #4: 0x0000000106812571 XUL`mozilla::TrackBuffersManager::OnAudioDemuxCompleted(this=0x000000014408d000, aSamples=nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder> at 0x00000001443c6668) + 305 at TrackBuffersManager.cpp:1109 frame #5: 0x0000000106823076 XUL`mozilla::EnableIf<(ReturnTypeIs<void (mozilla::TrackBuffersManager::*)(nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>), void>::value) && (TakesArgument<void (mozilla::TrackBuffersManager::*)(nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>)>::value), already_AddRefed<mozilla::MediaPromise<nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::DemuxerFailureReason, true> > >::Type mozilla::MediaPromise<nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::DemuxerFailureReason, true>::InvokeCallbackMethod<mozilla::TrackBuffersManager, void (aThisVal=0x000000014408d000, aMethod=0x0000000106812440, aValue=0x000000012f7bbd00)(nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>), nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder> const&>(mozilla::TrackBuffersManager*, void (mozilla::TrackBuffersManager::*)(nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>), nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder> const&&&) + 182 at MediaPromise.h:435 frame #6: 0x0000000106822ebf XUL`mozilla::MediaPromise<nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::DemuxerFailureReason, true>::MethodThenValue<mozilla::TrackBuffersManager, void (this=0x000000012b9634a0, aValue=0x000000012f7bbcf8)(nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>), void (mozilla::TrackBuffersManager::*)(mozilla::DemuxerFailureReason)>::DoResolveOrRejectInternal(mozilla::MediaPromise<nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::DemuxerFailureReason, true>::ResolveOrRejectValue const&) + 175 at MediaPromise.h:485 frame #7: 0x00000001066ca5d6 XUL`mozilla::MediaPromise<nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::DemuxerFailureReason, true>::ThenValueBase::DoResolveOrReject(this=0x000000012b9634a0, aValue=0x000000012f7bbcf8) + 214 at MediaPromise.h:385 frame #8: 0x00000001066ca2ec XUL`mozilla::MediaPromise<nsRefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::DemuxerFailureReason, true>::ThenValueBase::ResolveOrRejectRunnable::Run(this=0x000000012e7c1ca0) + 220 at MediaPromise.h:318 frame #9: 0x000000010662da39 XUL`mozilla::AutoTaskDispatcher::TaskGroupRunnable::Run(this=0x000000013b327460) + 281 at TaskDispatcher.h:181 frame #10: 0x000000010675286d XUL`mozilla::MediaTaskQueue::Runner::Run(this=0x000000013b346fc0) + 605 at MediaTaskQueue.cpp:256 frame #11: 0x000000010371e348 XUL`nsThreadPool::Run(this=0x00000001442b0ed0) + 984 at nsThreadPool.cpp:228 frame #12: 0x000000010371e44c XUL`non-virtual thunk to nsThreadPool::Run(this=0x00000001442b0ed8) + 28 at nsThreadPool.cpp:242 frame #13: 0x000000010371ace3 XUL`nsThread::ProcessNextEvent(this=0x0000000143ffce50, aMayWait=false, aResult=0x00000001443c6c6e) + 1971 at nsThread.cpp:867 frame #14: 0x000000010378d3c7 XUL`NS_ProcessNextEvent(aThread=0x0000000143ffce50, aMayWait=false) + 151 at nsThreadUtils.cpp:277 frame #15: 0x0000000103dd41c0 XUL`mozilla::ipc::MessagePumpForNonMainThreads::Run(this=0x0000000141cf3780, aDelegate=0x0000000141cf54e0) + 656 at MessagePump.cpp:326 frame #16: 0x0000000103d40ae5 XUL`MessageLoop::RunInternal(this=0x0000000141cf54e0) + 117 at message_loop.cc:234 frame #17: 0x0000000103d409f5 XUL`MessageLoop::RunHandler(this=0x0000000141cf54e0) + 21 at message_loop.cc:227 frame #18: 0x0000000103d4099d XUL`MessageLoop::Run(this=0x0000000141cf54e0) + 45 at message_loop.cc:201 frame #19: 0x0000000103719059 XUL`nsThread::ThreadFunc(aArg=0x0000000143ffce50) + 329 at nsThread.cpp:360 frame #20: 0x0000000103371621 libnss3.dylib`_pt_root(arg=0x0000000143231840) + 449 at ptthread.c:212 frame #21: 0x00007fff8a7e8268 libsystem_pthread.dylib`_pthread_body + 131 frame #22: 0x00007fff8a7e81e5 libsystem_pthread.dylib`_pthread_start + 176 frame #23: 0x00007fff8a7e641d libsystem_pthread.dylib`thread_start + 13
Frames may have small discontinuities, which would lead to intervals being created that are less than a frame duration.
Attachment #8632689 - Flags: review?(gsquelart)
Assignee: nobody → jyavenard
Comment on attachment 8632689 [details] [diff] [review] Apply fuzz factor when adjusting buffered time ranges. Review of attachment 8632689 [details] [diff] [review]: ----------------------------------------------------------------- r+, with or without suggestion (small impact). ::: dom/media/mediasource/TrackBuffersManager.cpp @@ +1559,5 @@ > TimeInterval(TimeUnit::FromMicroseconds(sample->mTime), > TimeUnit::FromMicroseconds(sample->GetEndTime())); > removedIntervals += sampleInterval; > + maxSampleDuration = > + std::max(maxSampleDuration, TimeUnit::FromMicroseconds(sample->mDuration)); Why not |if (max < dur) { max = dur }|? This would save a potential assignment in half the cases.
Attachment #8632689 - Flags: review?(gsquelart) → review+
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla42
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: