Closed Bug 1143192 Opened 9 years ago Closed 9 years ago

Assertions in DOM cache code after running tests

Categories

(Core :: DOM: Core & HTML, defect)

x86
macOS
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla39
Tracking Status
firefox39 --- fixed

People

(Reporter: ehsan.akhgari, Assigned: bkelly)

Details

Attachments

(1 file)

I just got the following assertions after running ./mach mochitest dom/cache with a patch that I will attach shortly during the browser shutdown:

[787] ###!!! ASSERTION: Calling GetOrCreate() after shutdown!: 'Error', file /Users/ehsan/moz/src/dom/quota/QuotaManager.cpp, line 1298
#01: mozilla::dom::quota::QuotaManager::GetOrCreate() (QuotaManager.cpp:1299, in XUL)
#02: mozilla::dom::cache::Context::QuotaInitRunnable::Run() (Context.cpp:216, in XUL)
#03: nsThread::ProcessNextEvent(bool, bool*) (nsThread.cpp:856, in XUL)
#04: NS_ProcessNextEvent(nsIThread*, bool) (nsThreadUtils.cpp:265, in XUL)
#05: mozilla::dom::cache::Manager::ShutdownAllOnMainThread() (Manager.cpp:1394, in XUL)
#06: (anonymous namespace)::CacheQuotaClient::ShutdownTransactionService() (QuotaClient.cpp:191, in XUL)
#07: mozilla::dom::quota::QuotaManager::Observe(nsISupports*, char const*, char16_t const*) (QuotaManager.cpp:2943, in XUL)
#08: non-virtual thunk to mozilla::dom::quota::QuotaManager::Observe(nsISupports*, char const*, char16_t const*) (QuotaManager.cpp:3014, in XUL)
#09: nsObserverList::NotifyObservers(nsISupports*, char const*, char16_t const*) (nsObserverList.cpp:100, in XUL)
#10: nsObserverService::NotifyObservers(nsISupports*, char const*, char16_t const*) (nsObserverService.cpp:329, in XUL)
#11: nsXREDirProvider::DoShutdown() (nsXREDirProvider.cpp:905, in XUL)
#12: ScopedXPCOMStartup::~ScopedXPCOMStartup() (nsAppRunner.cpp:1354, in XUL)
#13: ScopedXPCOMStartup::~ScopedXPCOMStartup() (nsAppRunner.cpp:1362, in XUL)
#14: XREMain::XRE_main(int, char**, nsXREAppData const*) (nsAppRunner.cpp:4305, in XUL)
#15: XRE_main (nsAppRunner.cpp:4498, in XUL)
#16: do_main(int, char**, nsIFile*) (nsBrowserApp.cpp:294, in firefox)
#17: main (nsBrowserApp.cpp:667, in firefox)
--DOMWINDOW == 34 (0x1198ef400) [pid = 787] [serial = 48] [outer = 0x0] [url = http://mochi.test:8888/tests/dom/cache/test/mochitest/message_receiver.html]
--DOMWINDOW == 33 (0x11ce66900) [pid = 787] [serial = 51] [outer = 0x0] [url = about:blank]
--DOMWINDOW == 32 (0x11ce66c80) [pid = 787] [serial = 53] [outer = 0x0] [url = about:blank]
--DOMWINDOW == 31 (0x11ce63100) [pid = 787] [serial = 52] [outer = 0x0] [url = http://mochi.test:8888/tests/dom/cache/test/mochitest/frame.html]
--DOMWINDOW == 30 (0x11ce65b00) [pid = 787] [serial = 50] [outer = 0x0] [url = http://mochi.test:8888/tests/dom/cache/test/mochitest/frame.html]
--DOMWINDOW == 29 (0x128b70000) [pid = 787] [serial = 9] [outer = 0x1212b0400] [url = about:blank]
--DOMWINDOW == 28 (0x128c35b80) [pid = 787] [serial = 10] [outer = 0x1201b4580] [url = about:blank]
--DOMWINDOW == 27 (0x1198eed00) [pid = 787] [serial = 23] [outer = 0x11c93ab80] [url = about:blank]
[787] ###!!! ASSERTION: Empty origin/pattern!: '!aOriginOrPattern.IsEmpty() || aOriginOrPattern.IsNull()', file /Users/ehsan/moz/src/dom/quota/QuotaManager.cpp, line 1824
#01: mozilla::dom::quota::QuotaManager::AllowNextSynchronizedOp(mozilla::dom::quota::OriginOrPatternString const&, mozilla::dom::Nullable<mozilla::dom::quota::PersistenceType>, nsACString_internal const&) (QuotaManager.cpp:1823, in XUL)
#02: (anonymous namespace)::QuotaReleaseRunnable::Run() (Context.cpp:44, in XUL)
#03: nsThread::ProcessNextEvent(bool, bool*) (nsThread.cpp:856, in XUL)
#04: NS_ProcessNextEvent(nsIThread*, bool) (nsThreadUtils.cpp:265, in XUL)
#05: nsThread::Shutdown() (nsThread.cpp:663, in XUL)
#06: mozilla::LazyIdleThread::ShutdownThread() (LazyIdleThread.cpp:309, in XUL)
#07: mozilla::LazyIdleThread::Shutdown() (LazyIdleThread.cpp:454, in XUL)
#08: mozilla::dom::quota::QuotaManager::Observe(nsISupports*, char const*, char16_t const*) (QuotaManager.cpp:2964, in XUL)
#09: non-virtual thunk to mozilla::dom::quota::QuotaManager::Observe(nsISupports*, char const*, char16_t const*) (QuotaManager.cpp:3014, in XUL)
#10: nsObserverList::NotifyObservers(nsISupports*, char const*, char16_t const*) (nsObserverList.cpp:100, in XUL)
#11: nsObserverService::NotifyObservers(nsISupports*, char const*, char16_t const*) (nsObserverService.cpp:329, in XUL)
#12: nsXREDirProvider::DoShutdown() (nsXREDirProvider.cpp:905, in XUL)
#13: ScopedXPCOMStartup::~ScopedXPCOMStartup() (nsAppRunner.cpp:1354, in XUL)
#14: ScopedXPCOMStartup::~ScopedXPCOMStartup() (nsAppRunner.cpp:1362, in XUL)
#15: XREMain::XRE_main(int, char**, nsXREAppData const*) (nsAppRunner.cpp:4305, in XUL)
#16: XRE_main (nsAppRunner.cpp:4498, in XUL)
#17: do_main(int, char**, nsIFile*) (nsBrowserApp.cpp:294, in firefox)
#18: main (nsBrowserApp.cpp:667, in firefox)
[787] ###!!! ASSERTION: Why didn't we find a SynchronizedOp?: 'Not Reached', file /Users/ehsan/moz/src/dom/quota/QuotaManager.cpp, line 1846
#01: mozilla::dom::quota::QuotaManager::AllowNextSynchronizedOp(mozilla::dom::quota::OriginOrPatternString const&, mozilla::dom::Nullable<mozilla::dom::quota::PersistenceType>, nsACString_internal const&) (QuotaManager.cpp:1847, in XUL)
#02: (anonymous namespace)::QuotaReleaseRunnable::Run() (Context.cpp:44, in XUL)
#03: nsThread::ProcessNextEvent(bool, bool*) (nsThread.cpp:856, in XUL)
#04: NS_ProcessNextEvent(nsIThread*, bool) (nsThreadUtils.cpp:265, in XUL)
#05: nsThread::Shutdown() (nsThread.cpp:663, in XUL)
#06: mozilla::LazyIdleThread::ShutdownThread() (LazyIdleThread.cpp:309, in XUL)
#07: mozilla::LazyIdleThread::Shutdown() (LazyIdleThread.cpp:454, in XUL)
#08: mozilla::dom::quota::QuotaManager::Observe(nsISupports*, char const*, char16_t const*) (QuotaManager.cpp:2964, in XUL)
#09: non-virtual thunk to mozilla::dom::quota::QuotaManager::Observe(nsISupports*, char const*, char16_t const*) (QuotaManager.cpp:3014, in XUL)
#10: nsObserverList::NotifyObservers(nsISupports*, char const*, char16_t const*) (nsObserverList.cpp:100, in XUL)
#11: nsObserverService::NotifyObservers(nsISupports*, char const*, char16_t const*) (nsObserverService.cpp:329, in XUL)
#12: nsXREDirProvider::DoShutdown() (nsXREDirProvider.cpp:905, in XUL)
#13: ScopedXPCOMStartup::~ScopedXPCOMStartup() (nsAppRunner.cpp:1354, in XUL)
#14: ScopedXPCOMStartup::~ScopedXPCOMStartup() (nsAppRunner.cpp:1362, in XUL)
#15: XREMain::XRE_main(int, char**, nsXREAppData const*) (nsAppRunner.cpp:4305, in XUL)
#16: XRE_main (nsAppRunner.cpp:4498, in XUL)
#17: do_main(int, char**, nsIFile*) (nsBrowserApp.cpp:294, in firefox)
#18: main (nsBrowserApp.cpp:667, in firefox)

Running the tests again, I don't get the assertion.

Ben, do you mind taking a look please?
Flags: needinfo?(bkelly)
The patch mentioned in comment 0 is attachment 8577486 [details] [diff] [review].  This was on inbound after landing my cache stuff from earlier today.
We should not open a new Context() here.  I'll take a look.
Assignee: nobody → bkelly
Status: NEW → ASSIGNED
Flags: needinfo?(bkelly)
Actually, I think this is a case where we have queued up a Context::QuotaInitRunnable on the main thread, but its in the queue behind the QM's shutdown event.  So we clean up everything and then that runnable executes and tries to open QM again.

We need to check a cancellation flag in QuotaInitRunnable::Run().
This adds a cancellation path to the Context::QuotaInitRunnable.  Since each step of the runnable is synchronous I just use an atomic flag here.

Also, fix up some stale strings in NS_ASSERT_OWNINGTHREAD() from my last patch.
Attachment #8582669 - Flags: review?(ehsan)
Attachment #8582669 - Flags: review?(ehsan) → review+
https://hg.mozilla.org/mozilla-central/rev/203991c8a8fc
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla39
Component: DOM → DOM: Core & HTML
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: