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)
Tracking
()
RESOLVED
FIXED
mozilla23
People
(Reporter: RyanVM, Assigned: padenot)
References
Details
(Keywords: assertion, intermittent-failure)
Attachments
(1 file, 1 obsolete file)
11.63 KB,
patch
|
cpearce
:
review+
|
Details | Diff | Splinter Review |
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...
Reporter | ||
Comment 1•12 years ago
|
||
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)')
Comment hidden (Legacy TBPL/Treeherder Robot) |
Reporter | ||
Comment 3•12 years ago
|
||
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
Assignee | ||
Comment 4•12 years ago
|
||
I'll do that, it _should_ just be a matter of locking properly.
Stack: http://khuey.pastebin.mozilla.org/2219919
Assignee: nobody → paul
Comment 5•12 years ago
|
||
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 hidden (Legacy TBPL/Treeherder Robot) |
Reporter | ||
Comment 8•12 years ago
|
||
Reporter | ||
Comment 9•12 years ago
|
||
Reporter | ||
Comment 10•12 years ago
|
||
Reporter | ||
Comment 11•12 years ago
|
||
Comment hidden (Legacy TBPL/Treeherder Robot) |
Assignee | ||
Comment 13•12 years ago
|
||
Attachment #733909 -
Flags: review?(cpearce)
Comment 14•12 years ago
|
||
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-
Comment 15•12 years ago
|
||
(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.
Assignee | ||
Comment 16•12 years ago
|
||
Attachment #735154 -
Flags: review?(cpearce)
Assignee | ||
Updated•12 years ago
|
Attachment #733909 -
Attachment is obsolete: true
Comment 17•12 years ago
|
||
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+
Assignee | ||
Comment 18•12 years ago
|
||
Reporter | ||
Comment 19•12 years ago
|
||
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.
Description
•