Open Bug 1254652 Opened 9 years ago Updated 3 years ago

NS_ENSURE_TRUE(context) failed during nsThread::Shutdown

Categories

(Core :: XPCOM, defect)

defect

Tracking

()

Tracking Status
firefox48 --- affected

People

(Reporter: froydnj, Unassigned)

Details

This warning shows up during debug runs: 11:36:04 INFO - [1881] WARNING: NS_ENSURE_TRUE(context) failed: file /builds/slave/m-in-lx-d-00000000000000000000/build/src/xpcom/threads/nsThread.cpp, line 805 I noticed it today in my local build and added NS_ASSERTION: [11220] ###!!! ASSERTION: ouch!: 'context', file /home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp, line 805 #01: nsRunnableMethodImpl<nsresult (nsIThread::*)(), true>::Run() (/opt/build/froydnj/build-debug/dist/include/nsThreadUtils.h:873) #02: nsThread::ProcessNextEvent(bool, bool*) (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:1000) #03: NS_ProcessNextEvent(nsIThread*, bool) (/home/froydnj/src/gecko-dev.git/xpcom/glue/nsThreadUtils.cpp:297) #04: nsThread::Shutdown() (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:810) #05: nsRunnableMethodImpl<nsresult (nsIThread::*)(), true>::Run() (/opt/build/froydnj/build-debug/dist/include/nsThreadUtils.h:873) #06: nsThread::ProcessNextEvent(bool, bool*) (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:1000) #07: NS_ProcessNextEvent(nsIThread*, bool) (/home/froydnj/src/gecko-dev.git/xpcom/glue/nsThreadUtils.cpp:297) #08: nsThread::Shutdown() (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:810) #09: nsRunnableMethodImpl<nsresult (nsIThread::*)(), true>::Run() (/opt/build/froydnj/build-debug/dist/include/nsThreadUtils.h:873) #10: nsThread::ProcessNextEvent(bool, bool*) (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:1000) #11: NS_ProcessNextEvent(nsIThread*, bool) (/home/froydnj/src/gecko-dev.git/xpcom/glue/nsThreadUtils.cpp:297) #12: nsThread::Shutdown() (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:810) #13: mozilla::dom::workers::RuntimeService::NoteIdleThread(mozilla::dom::workers::WorkerThread*) (/home/froydnj/src/gecko-dev.git/dom/workers/RuntimeService.cpp:2373) #14: ~RefPtr (/opt/build/froydnj/build-debug/dist/include/mozilla/RefPtr.h:76) #15: nsThread::ProcessNextEvent(bool, bool*) (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:1000) #16: NS_ProcessNextEvent(nsIThread*, bool) (/home/froydnj/src/gecko-dev.git/xpcom/glue/nsThreadUtils.cpp:297) #17: nsThread::Shutdown() (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:810) #18: mozilla::dom::workers::RuntimeService::NoteIdleThread(mozilla::dom::workers::WorkerThread*) (/home/froydnj/src/gecko-dev.git/dom/workers/RuntimeService.cpp:2373) #19: ~RefPtr (/opt/build/froydnj/build-debug/dist/include/mozilla/RefPtr.h:76) #20: nsThread::ProcessNextEvent(bool, bool*) (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:1000) #21: NS_ProcessNextEvent(nsIThread*, bool) (/home/froydnj/src/gecko-dev.git/xpcom/glue/nsThreadUtils.cpp:297) #22: nsThread::Shutdown() (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:810) #23: mozilla::dom::workers::RuntimeService::NoteIdleThread(mozilla::dom::workers::WorkerThread*) (/home/froydnj/src/gecko-dev.git/dom/workers/RuntimeService.cpp:2373) #24: ~RefPtr (/opt/build/froydnj/build-debug/dist/include/mozilla/RefPtr.h:76) #25: nsThread::ProcessNextEvent(bool, bool*) (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:1000) #26: NS_ProcessNextEvent(nsIThread*, bool) (/home/froydnj/src/gecko-dev.git/xpcom/glue/nsThreadUtils.cpp:297) #27: nsThread::Shutdown() (/home/froydnj/src/gecko-dev.git/xpcom/threads/nsThread.cpp:810) #28: nsTArray_base<nsTArrayInfallibleAllocator, nsTArray_CopyWithMemutils>::Length() const (/opt/build/froydnj/build-debug/dist/include/nsTArray.h:361) #29: nsTArray_base<nsTArrayInfallibleAllocator, nsTArray_CopyWithMemutils>::Length() const (/opt/build/froydnj/build-debug/dist/include/nsTArray.h:361) #30: nsTHashtable<nsObserverList>::GetEntry(char const*) const (/opt/build/froydnj/build-debug/dist/include/nsTHashtable.h:134) #31: mozilla::ShutdownXPCOM(nsIServiceManager*) (/home/froydnj/src/gecko-dev.git/xpcom/build/XPCOMInit.cpp:868) #32: ~nsCOMPtr (/opt/build/froydnj/build-debug/dist/include/nsCOMPtr.h:403) #33: operator delete (/opt/build/froydnj/build-debug/dist/include/mozilla/mozalloc.h:210) #34: XRE_main (/home/froydnj/src/gecko-dev.git/toolkit/xre/nsAppRunner.cpp:4516) #35: do_main (/home/froydnj/src/gecko-dev.git/browser/app/nsBrowserApp.cpp:212) #36: main (/home/froydnj/src/gecko-dev.git/browser/app/nsBrowserApp.cpp:360) #37: __libc_start_main (/build/glibc-I9DIZl/glibc-2.19/csu/libc-start.c:321) #38: _start (/opt/build/froydnj/build-debug/dist/bin/firefox) #39: ??? (???:???) We are draining event queues via nested event loops? Seems not so great. ni? to khuey for thoughts and also maybe an explanation of what's going on with the worker stuff in there?
Flags: needinfo?(khuey)
This warning appears if a) We call shutdown on a thread from that thread. b) We call shutdown twice on the same thread. In both cases the shutdown call that warns becomes a no-op. I guess before we didn't warn in case b, we could restore that behavior if you care. http://hg.mozilla.org/mozilla-central/rev/6bb087e3ec08#l4.136
Flags: needinfo?(khuey)
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.