Closed Bug 847194 Opened 12 years ago Closed 12 years ago

Intermittent test_CrossSiteXHR.html, test_playback_errors.html, test_contextmenu.html | Assertion count 1 is greater than expected range (RECURSION_LEVEL_SAFE_TO_FINISH(table): 'RECURSION_LEVEL_SAFE_TO_FINISH(table)')

Categories

(Core :: Audio/Video, defect)

x86
Windows XP
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla23

People

(Reporter: RyanVM, Assigned: padenot)

References

Details

(Keywords: assertion, intermittent-failure)

Attachments

(1 file, 1 obsolete file)

https://tbpl.mozilla.org/php/getParsedLog.php?id=20271053&tree=Mozilla-Inbound&full=1 builder: mozilla-inbound_xp-debug_test-mochitest-1 slave: talos-r3-xp-052 22:09:35 INFO - 3803 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | shouldn't have failed in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"y x-my-header", expectedResponseHeaders:[]}) 22:09:35 INFO - 3804 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong status in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"y x-my-header", expectedResponseHeaders:[]}) 22:09:35 INFO - 3805 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong status text for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"y x-my-header", expectedResponseHeaders:[]}) 22:09:35 INFO - 3806 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong responseXML in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"y x-my-header", expectedResponseHeaders:[]}) 22:09:35 INFO - 3807 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong responseText in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"y x-my-header", expectedResponseHeaders:[]}) 22:09:35 INFO - 3808 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong responseText in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"y x-my-header", expectedResponseHeaders:[]}) 22:09:35 INFO - 3809 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | |xhr.getResponseHeader()|wrong response header (x-my-header) in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"y x-my-header", expectedResponseHeaders:[]}) 22:09:35 INFO - 3810 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | |xhr.getAllResponseHeaderss()|wrong response header (x-my-header) in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"y x-my-header", expectedResponseHeaders:[]}) 22:09:35 INFO - ###!!! ASSERTION: RECURSION_LEVEL_SAFE_TO_FINISH(table): 'RECURSION_LEVEL_SAFE_TO_FINISH(table)', file e:/builds/moz2_slave/m-in-w32-d-0000000000000000000/build/obj-firefox/xpcom/build/pldhash.cpp, line 369 22:09:36 INFO - --DOMWINDOW == 152 (168A8C20) [serial = 186] [outer = 00000000] [url = about:blank] 22:09:36 INFO - --DOMWINDOW == 151 (17A78DC8) [serial = 187] [outer = 00000000] [url = about:blank] 22:09:36 INFO - --DOMWINDOW == 150 (0D4207B0) [serial = 274] [outer = 17682210] [url = about:blank] 22:09:36 INFO - --DOMWINDOW == 149 (0D71D118) [serial = 276] [outer = 1768B338] [url = about:blank] 22:09:36 INFO - --DOMWINDOW == 148 (0D256080) [serial = 278] [outer = 176943B0] [url = about:blank] 22:09:36 INFO - --DOMWINDOW == 147 (160FE720) [serial = 283] [outer = 16173BF8] [url = about:blank] 22:09:36 INFO - --DOMWINDOW == 146 (178351A8) [serial = 285] [outer = 17707430] [url = about:blank] 22:09:36 INFO - --DOMWINDOW == 145 (165A4760) [serial = 287] [outer = 177103F0] [url = about:blank] 22:09:36 INFO - 3811 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | shouldn't have failed in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-header z", expectedResponseHeaders:[]}) 22:09:36 INFO - 3812 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong status in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-header z", expectedResponseHeaders:[]}) 22:09:36 INFO - 3813 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong status text for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-header z", expectedResponseHeaders:[]}) 22:09:36 INFO - 3814 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong responseXML in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-header z", expectedResponseHeaders:[]}) 22:09:36 INFO - 3815 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong responseText in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-header z", expectedResponseHeaders:[]}) 22:09:36 INFO - 3816 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong responseText in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-header z", expectedResponseHeaders:[]}) 22:09:36 INFO - 3817 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | |xhr.getResponseHeader()|wrong response header (x-my-header) in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-header z", expectedResponseHeaders:[]}) 22:09:36 INFO - 3818 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | |xhr.getAllResponseHeaderss()|wrong response header (x-my-header) in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-header z", expectedResponseHeaders:[]}) 22:09:36 INFO - 3819 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | shouldn't have failed in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-hea(er", expectedResponseHeaders:[]}) 22:09:36 INFO - 3820 INFO TEST-PASS | /tests/content/base/test/test_CrossSiteXHR.html | wrong status in test for ({pass:1, method:"GET", responseHeaders:{'x-my-header':"x header"}, exposeHeaders:"x-my-header, y-my-hea(er", expectedResponseHeaders:[]}) etc...
Summary: Intermittent test_CrossSiteXHR.html | Assertion count 1 is greater than expected range (RECURSION_LEVEL_SAFE_TO_FINISH(table): 'RECURSION_LEVEL_SAFE_TO_FINISH(table)') → Intermittent test_CrossSiteXHR.html, test_playback_errors.html | Assertion count 1 is greater than expected range (RECURSION_LEVEL_SAFE_TO_FINISH(table): 'RECURSION_LEVEL_SAFE_TO_FINISH(table)')
Summary: Intermittent test_CrossSiteXHR.html, test_playback_errors.html | Assertion count 1 is greater than expected range (RECURSION_LEVEL_SAFE_TO_FINISH(table): 'RECURSION_LEVEL_SAFE_TO_FINISH(table)') → Intermittent test_CrossSiteXHR.html, test_playback_errors.html, test_contextmenu.html | Assertion count 1 is greater than expected range (RECURSION_LEVEL_SAFE_TO_FINISH(table): 'RECURSION_LEVEL_SAFE_TO_FINISH(table)')
Component: XPCOM → Video/Audio
I'll do that, it _should_ just be a matter of locking properly. Stack: http://khuey.pastebin.mozilla.org/2219919
Assignee: nobody → paul
Pasting stack trace from comment #4: 05:44:56 INFO - ###!!! ASSERTION: RECURSION_LEVEL(table_) > 0: 'RECURSION_LEVEL(table) > 0', file e:/builds/moz2_slave/m-in-w32-d-0000000000000000000/build/obj-firefox/xpcom/build/pldhash.cpp, line 670 05:44:57 INFO - 1142 INFO TEST-PASS | /tests/browser/base/content/test/test_contextmenu.html | Got context menu XUL 05:44:57 INFO - 1143 INFO TEST-KNOWN-FAIL | /tests/browser/base/content/test/test_contextmenu.html | Wait for subwindow to load... (This should usually happen once.) 05:44:57 INFO - 1144 INFO TEST-PASS | /tests/browser/base/content/test/test_contextmenu.html | Got context menu XUL 05:44:57 INFO - 1145 INFO TEST-PASS | /tests/browser/base/content/test/test_contextmenu.html | Starting test #1 05:44:57 INFO - 1146 INFO TEST-PASS | /tests/browser/base/content/test/test_contextmenu.html | checking if popup is closed 05:44:57 INFO - 1147 INFO TEST-PASS | /tests/browser/base/content/test/test_contextmenu.html | Starting test #2 05:45:07 INFO - nsTHashtable<nsBaseHashtableET<nsUint32HashKey,nsAutoPtr<mozilla::OggCodecState> > >::GetEntry(unsigned int const &) [obj-firefox/dist/include/nsTHashtable.h:148] 05:45:07 INFO - nsClassHashtable<nsUint32HashKey,mozilla::OggCodecState>::Get(unsigned int const &,mozilla::OggCodecState * *) [obj-firefox/dist/include/nsClassHashtable.h:65] 05:45:07 INFO - mozilla::OggReader::NextOggPacket(mozilla::OggCodecState *) [content/media/ogg/OggReader.cpp:924] 05:45:07 INFO - mozilla::OggReader::DecodeVideoFrame(bool &,__int64) [content/media/ogg/OggReader.cpp:832] 05:45:07 INFO - mozilla::MediaDecoderReader::DecodeToFirstVideoData() [content/media/MediaDecoderReader.cpp:417] 05:45:07 INFO - mozilla::MediaDecoderReader::FindStartTime(__int64 &) [content/media/MediaDecoderReader.cpp:451] 05:45:07 INFO - mozilla::MediaDecoderStateMachine::FindStartTime() [content/media/MediaDecoderStateMachine.cpp:2505] 05:45:07 INFO - mozilla::MediaDecoderStateMachine::DecodeMetadata() [content/media/MediaDecoderStateMachine.cpp:1841] 05:45:07 INFO - mozilla::MediaDecoderStateMachine::DecodeThreadRun() [content/media/MediaDecoderStateMachine.cpp:481] 05:45:07 INFO - nsRunnableMethodImpl<void ( mozilla::MediaDecoderStateMachine::*)(void),1>::Run() [obj-firefox/dist/include/nsThreadUtils.h:368] 05:45:07 INFO - nsThread::ProcessNextEvent(bool,bool *) [xpcom/threads/nsThread.cpp:627] 05:45:07 INFO - NS_ProcessNextEvent_P(nsIThread *,bool) [obj-firefox/xpcom/build/nsThreadUtils.cpp:238] 05:45:07 INFO - nsThread::ThreadFunc(void *) [xpcom/threads/nsThread.cpp:265]
Comment on attachment 733909 [details] [diff] [review] Protect mCodecStates from concurrent accesses. r= Review of attachment 733909 [details] [diff] [review]: ----------------------------------------------------------------- I think we should also protect accesses to mKnownStreams. Since we always use mKnownStreams and mCodecStates together, I think we should factor them out into their own threadsafe object, with a clear interface which manages the synchronization for the caller. It can have its own monitor. Something like: class OggCodecStore { public: void Add(OggCodecState*, int serial); bool Contains(int serial); OggCodecState* Get(int serial); }
Attachment #733909 - Flags: review?(cpearce) → review-
(In reply to Chris Pearce (:cpearce) from comment #14) > Something like: > > class OggCodecStore { > public: > void Add(OggCodecState*, int serial); > bool Contains(int serial); > OggCodecState* Get(int serial); > } An yes, with this design Contains() can return false on one thread and then a codecstate can immediately be added on another thread so the just-returned value is now wrong. I think this is OK, this would only affect our code that calculates HTMLMediaElement.buffered, and it's not a big deal if we under-estimates the buffered ranges for a tick.
Attachment #733909 - Attachment is obsolete: true
Comment on attachment 735154 [details] [diff] [review] Protect mCodecStates from concurrent accesses. r= Review of attachment 735154 [details] [diff] [review]: ----------------------------------------------------------------- ::: content/media/ogg/OggReader.cpp @@ +1872,5 @@ > #endif > } > > +OggCodecStore::OggCodecStore() > +:mMonitor("CodecStore") : mMonitor("CodecStore") ::: content/media/ogg/OggReader.h @@ +34,5 @@ > + OggCodecStore(); > + void Add(uint32_t serial, OggCodecState* codecState); > + bool Contains(uint32_t serial); > + OggCodecState* Get(uint32_t serial); > + bool IsKnownStream(uint32_t aSerial); Actually it seems that IsKnownStreams(serial)==Contains(serial), so we may as well remove IsKnownStreams() and mKnownStreams() and just use Contains() instead.
Attachment #735154 - Flags: review?(cpearce) → review+
Status: NEW → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla23
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: