Closed Bug 1234531 Opened 9 years ago Closed 8 years ago

Shutdown hang on thread pool thread EncodingRunnable if the browser is closed shortly after being opened

Categories

(Core :: XPCOM, defect)

defect
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 1244118
Tracking Status
e10s ? ---
firefox46 --- affected

People

(Reporter: jimm, Unassigned)

References

Details

This is a recent regression.

str:

1) enable e10s
2) disable any session restore features
3) set your home page to about:blank
4) close firefox
5) open task manager
6) open firefox
7) navigate the first tab a simple web page
8) close firefox

In task manager, plugin-container should shut down immediately, but firefox.exe will stay around for five to ten seconds, and then close. This happens on every new session.
tracy: please try to reproduce this
Flags: needinfo?(twalker)
I tried reproducing on Mac and Win7. In both cases, firefox.exe only hung around in the task manager for 1-2 seconds after quitting Nightly.
Flags: needinfo?(twalker)
jim, I can't say I've seen issues like this either
Flags: needinfo?(jmathies)
This is still happening for me. Appears to be a race in a thread pool related to image decoding.

thread: EncodingRunnable #1

thread stack:

ntdll.dll!_ZwWaitForSingleObject@12()	Unknown
KernelBase.dll!_WaitForSingleObjectEx@12()	Unknown
kernel32.dll!_WaitForSingleObjectExImplementation@12()	Unknown
kernel32.dll!_WaitForSingleObject@8()	Unknown
nss3.dll!_PR_MD_WAIT_CV(_MDCVar * cv, _MDLock * lock, unsigned int timeout) Line 250	C
nss3.dll!_PR_WaitCondVar(PRThread * thread, PRCondVar * cvar, PRLock * lock, unsigned int timeout) Line 173	C
nss3.dll!PR_WaitCondVar(PRCondVar * cvar, unsigned int timeout) Line 525	C
xul.dll!mozilla::CondVar::Wait(unsigned int aInterval) Line 80	C++
xul.dll!nsThreadPool::Run() Line 218	C++
xul.dll!nsThread::ProcessNextEvent(bool aMayWait, bool * aResult) Line 997	C++
xul.dll!NS_ProcessNextEvent(nsIThread * aThread, bool aMayWait) Line 297	C++
xul.dll!mozilla::ipc::MessagePumpForNonMainThreads::Run(base::MessagePump::Delegate * aDelegate) Line 326	C++
xul.dll!MessageLoop::RunHandler() Line 228	C++
xul.dll!MessageLoop::Run() Line 202	C++
xul.dll!nsThread::ThreadFunc(void * aArg) Line 403	C++
nss3.dll!_PR_NativeRunThread(void * arg) Line 419	C
nss3.dll!pr_root(void * arg) Line 95	C
msvcr120.dll!__beginthreadex()	Unknown
msvcr120.dll!__endthreadex()	Unknown
kernel32.dll!@BaseThreadInitThunk@12()	Unknown
ntdll.dll!___RtlUserThreadStart@8()	Unknown
ntdll.dll!__RtlUserThreadStart@8()	Unknown
Component: General → XPCOM
Flags: needinfo?(jmathies)
Product: Firefox → Core
Summary: Long delay in shutting down firefox.exe if the browser is closed shortly after being opened → Shutdown hang on thread pool thread EncodingRunnable if the browser is closed shortly after being opened
Here's the threadpool output, the *** lines are debug statements I've added to nsThreadManager shutdown code.

THRD-P(1E4106A0) constructor!!!
THRD-P(1E4106A0) thread limit [2]
THRD-P(1E4106A0) idle thread limit [1]
THRD-P(1E4106A0) dispatch [0 0]
THRD-P(1E4106A0) put [0 0 2]
THRD-P(1E4106A0) put [spawn=1]
THRD-P(1E4106A0) put [1E51A680 kill=0]
THRD-P(1E4106A0) enter EncodingRunnable
THRD-P(1E4106A0) EncodingRunnable running [1AF3EE20]
THRD-P(1E4106A0) EncodingRunnable waiting [30000]
*** inspecting thread 1E51A680
*** shutting down EncodingRunnable #1 (1E51A680)
(long wait)
THRD-P(1E4106A0) done waiting
THRD-P(1E4106A0) shutdown async [1E51A680]
THRD-P(1E4106A0) leave
*** exiting ThreadFunc: EncodingRunnable #1 (1E51A680)
*** done with 1E51A680
The hang appears to be on any thread pool thread that doesn't shut down before nsThreadManager::Shutdown() gets called.

THRD-P(1D99F4C0) constructor!!!
THRD-P(1D99F4C0) thread limit [2]
THRD-P(1D99F4C0) idle thread limit [1]
THRD-P(1D99F4C0) dispatch [0 0]
THRD-P(1D99F4C0) put [0 0 2]
THRD-P(1D99F4C0) put [spawn=1]
THRD-P(1D99F4C0) put [1B829680 kill=0]
THRD-P(1D99F4C0) enter EncodingRunnable
THRD-P(1D99F4C0) EncodingRunnable running [1AC3CCC0]
THRD-P(1D99F4C0) EncodingRunnable waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1B88C7E8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1C699C48]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D9961A8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans running [1D9961F8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D9961F8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D996248]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D996388]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D9962E8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D996518]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D996518]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D9965B8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D9969C8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D996BA8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D996BF8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D996C48]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D996CE8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1D9AD888]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1E64D388]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [16FC4068]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [1FBCAFB8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(5BE5E0) dispatch [0 0]
THRD-P(5BE5E0) put [1 1 5]
THRD-P(5BE5E0) put [spawn=0]
THRD-P(5BE5E0) SSL Cert done waiting
THRD-P(5BE5E0) SSL Cert running [C7B6640]
THRD-P(5BE5E0) dispatch [0 0]
THRD-P(5BE5E0) put [0 1 5]
THRD-P(5BE5E0) put [spawn=1]
THRD-P(5BE5E0) put [142A6800 kill=0]
THRD-P(5BE5E0) enter SSL Cert
THRD-P(5BE5E0) SSL Cert running [C7B6700]
THRD-P(5BE5E0) SSL Cert waiting [30000]
THRD-P(5BE5E0) SSL Cert waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans running [16FD24C8]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(5BE5E0) SSL Cert shutdown called
THRD-P(5BE5E0) SSL Cert shutdown notify
THRD-P(5BE5E0) SSL Cert calling shutdown on threads
THRD-P(5BE5E0) SSL Cert done waiting
THRD-P(5BE5E0) SSL Cert done waiting
THRD-P(5BE5E0) SSL Cert leave
THRD-P(5BE5E0) SSL Cert leave
*** exiting ThreadFunc: SSL Cert #1 (1B0FBC80)
*** exiting ThreadFunc: SSL Cert #2 (142A6800)
THRD-P(5BE5E0) SSL Cert shutdown complete
*** exiting ThreadFunc: Socket Thread (53F680)
*** exiting ThreadFunc: mozStorage #5 (1B8B5B80)
*** exiting ThreadFunc: Storage I/O (1ADEFC80)
*** exiting ThreadFunc: mozStorage #3 (13EE0400)
*** exiting ThreadFunc: IndexedDB #1 (1B0FBD00)
*** exiting ThreadFunc: URL Classifier (18413B00)
*** exiting ThreadFunc: (null) (165B5880)
*** exiting ThreadFunc: mozStorage #6 (AF6D780)
*** exiting ThreadFunc: mozStorage #2 (1A8F1B80)
*** exiting ThreadFunc: mozStorage #1 (19828E80)
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [C27C5C0]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [C2F5A40]
THRD-P(C81BE80) StreamTrans waiting [30000]
THRD-P(C81BE80) dispatch [0 0]
THRD-P(C81BE80) put [1 1 25]
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans running [C4BB5E0]
THRD-P(C81BE80) put [spawn=0]
THRD-P(C81BE80) StreamTrans waiting [30000]
*** exiting ThreadFunc: Cache I/O (BF12D00)
*** exiting ThreadFunc: Proxy Resolution (1B0FB980)
*** exiting ThreadFunc: thread shutdown (C26E500)
*** exiting ThreadFunc: mozStorage #4 (1B8B5080)
*** exiting ThreadFunc: DOM Worker (1D9182C0)
*** exiting ThreadFunc: DOM Worker (142387D0)
*** exiting ThreadFunc: DOM Worker (1417F980)
*** exiting ThreadFunc: IPDL Background (13413580)
*** exiting ThreadFunc: HTML5 Parser (13396300)
*** exiting ThreadFunc: ImgDecoder #1 (CD3C380)
*** exiting ThreadFunc: ImgDecoder #3 (CD3C480)
*** exiting ThreadFunc: ImgDecoder #4 (CD3C500)
*** exiting ThreadFunc: ImgDecoder #2 (CD3C400)
*** exiting ThreadFunc: ImgDecoder #6 (CD3C600)
*** exiting ThreadFunc: ImgDecoder #7 (CD3C680)
*** exiting ThreadFunc: ImgDecoder #5 (CD3C580)
*** exiting ThreadFunc: ImageIO (CD3C700)
THRD-P(C81BE80) StreamTrans shutdown called
THRD-P(C81BE80) StreamTrans shutdown notify
THRD-P(C81BE80) StreamTrans done waiting
THRD-P(C81BE80) StreamTrans leave
THRD-P(C81BE80) StreamTrans calling shutdown on threads
*** exiting ThreadFunc: StreamTrans #5 (13CB1580)
THRD-P(C81BE80) StreamTrans shutdown complete
*** exiting ThreadFunc: GMPThread (C84F180)
*** exiting ThreadFunc: Link Monitor (53F600)
*** exiting ThreadFunc: Timer (540B80)
*** nsThreadManager::Shutdown()
*** inspecting thread 1B730B00
*** inspecting thread 7A96680
*** inspecting thread CD3BF00
*** inspecting thread CD3BD00
*** inspecting thread 1A8F1300
*** inspecting thread CD3C800
*** inspecting thread 53F300
*** inspecting thread 1B829680
*** shutting down EncodingRunnable #1 (1B829680)
THRD-P(1D99F4C0) EncodingRunnable done waiting
THRD-P(1D99F4C0) shutdown async [1B829680]
THRD-P(1D99F4C0) EncodingRunnable leave
*** exiting ThreadFunc: EncodingRunnable #1 (1B829680)
*** done with 1B829680
*** done with sync waiting.
The program '[1664] firefox.exe' has exited with code 0 (0x0).
This EncodingRunnable code was just introduced. This bug appears to be a dupe of bug 1244118.
Blocks: 1172796
Status: NEW → RESOLVED
Closed: 8 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.