Closed Bug 1178257 Opened 10 years ago Closed 5 years ago

[e10s] Plugin hang in NPP_Destroy

Categories

(Core Graveyard :: Plug-ins, defect, P3)

defect

Tracking

(e10s+, firefox42 affected)

RESOLVED WONTFIX
Tracking Status
e10s + ---
firefox42 --- affected

People

(Reporter: jimm, Unassigned)

References

Details

I wonder if there's a way we can make this call internal (async) for the plugin process and just return true to the content process before we actually do it. Clearly we need to get the content process off the stack here. http://hg.mozilla.org/mozilla-central/annotate/be81b8d6fae9/dom/plugins/ipc/PluginInstanceChild.cpp#l3975 That said, I'm not sure it would avoid this since I'm not sure which process is the instigator of the hang here. If I were to speculate I'd say that there's a message waiting in the input queue of the browser or plugin process that's been marked as non-new by some other thread. *********************************************************************************** 507217f0-aece-442d-8068-66a0f2150623 Windows 7, 6.1.7601 Service Pack 1 NPSWF32_17_0_0_188.dll *********************************************************************************** PLUGIN ----------------------------------------------------------------------------------- 0 ZwWaitForMultipleObjects 1 WaitForMultipleObjectsEx 2 WaitForMultipleObjectsExImplementation 3 RealMsgWaitForMultipleObjectsEx 4 MsgWaitForMultipleObjects 5 F_1152915508___________________________________ 6 F2166389_____________________________________________________________________ 7 F_917831355____________________________________________ 8 F1315696776________________________________ 9 F_1428703866________________________________ 10 F845925699_____________________________________ 11 F_1887993982_________________________________________________ 12 F536410639___________________________________________________________ 13 mozilla::plugins::PluginInstanceChild::Destroy() src 14 mozilla::plugins::PluginInstanceChild::AnswerNPP_Destroy(short *) src 15 mozilla::plugins::PPluginInstanceChild::OnCallReceived(IPC::Message const &,IPC::Message * &) src 16 mozilla::plugins::PPluginModuleChild::OnCallReceived(IPC::Message const &,IPC::Message * &) src 17 mozilla::ipc::MessageChannel::DispatchInterruptMessage(IPC::Message const &,unsigned int) src 18 mozilla::ipc::MessageChannel::OnMaybeDequeueOne() src 19 MessageLoop::DoWork() src 20 base::MessagePumpForUI::DoRunLoop() src 21 base::MessagePumpWin::RunWithDispatcher(base::MessagePump::Delegate *,base::MessagePumpWin::Dispatcher *) src 22 base::MessagePumpWin::Run(base::MessagePump::Delegate *) src 23 MessageLoop::RunInternal() src 24 MessageLoop::RunHandler() src 25 MessageLoop::Run() src 26 XRE_InitChildProcess src 27 content_process_main(int,char * * const) src 28 wmain src 29 __tmainCRTStartup 30 BaseThreadInitThunk 31 __RtlUserThreadStart 32 _RtlUserThreadStart CONTENT ----------------------------------------------------------------------------------- 0 ZwWaitForMultipleObjects 1 WaitForMultipleObjectsEx 2 WaitForMultipleObjectsExImplementation 3 RealMsgWaitForMultipleObjectsEx 4 MsgWaitForMultipleObjects 5 mozilla::ipc::MessageChannel::WaitForInterruptNotify() src 6 mozilla::ipc::MessageChannel::Call(IPC::Message *,IPC::Message *) src 7 mozilla::plugins::PPluginInstanceParent::CallNPP_Destroy(short *) src 8 mozilla::plugins::PluginInstanceParent::Destroy() src 9 mozilla::plugins::PluginModuleParent::NPP_Destroy(_NPP *,_NPSavedData * *) src 10 nsNPAPIPluginInstance::Stop() src 11 nsPluginHost::StopPluginInstance(nsNPAPIPluginInstance *) src 12 nsObjectLoadingContent::DoStopPlugin(nsPluginInstanceOwner *,bool,bool) src 13 nsObjectLoadingContent::StopPluginInstance() src 14 CheckPluginStopEvent::Run() src 15 nsThread::ProcessNextEvent(bool,bool *) src 16 mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate *) src 17 mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate *) src 18 MessageLoop::RunHandler() src 19 MessageLoop::Run() src 20 nsBaseAppShell::Run() src 21 nsAppShell::Run() src 22 XRE_RunAppShell src 23 mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate *) src 24 MessageLoop::RunHandler() src 25 MessageLoop::Run() src 26 XRE_InitChildProcess src 27 content_process_main(int,char * * const) src 28 wmain src 29 __tmainCRTStartup 30 BaseThreadInitThunk 31 __RtlUserThreadStart 32 _RtlUserThreadStart BROWSER ----------------------------------------------------------------------------------- 0 ZwWaitForMultipleObjects 1 WaitForMultipleObjectsEx 2 WaitForMultipleObjectsExImplementation 3 RealMsgWaitForMultipleObjectsEx 4 mozilla::widget::WinUtils::WaitForMessage(unsigned long) src 5 nsAppShell::ProcessNextNativeEvent(bool) src 6 nsBaseAppShell::DoProcessNextNativeEvent(bool,unsigned int) src 7 nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal *,bool,unsigned int) src 8 nsThread::ProcessNextEvent(bool,bool *) src 9 NS_ProcessNextEvent(nsIThread *,bool) src 10 mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate *) src 11 MessageLoop::RunHandler() src 12 MessageLoop::Run() src 13 nsBaseAppShell::Run() src 14 nsAppShell::Run() src 15 nsAppStartup::Run() src 16 XREMain::XRE_mainRun() src 17 XREMain::XRE_main(int,char * * const,nsXREAppData const *) src 18 XRE_main src 19 do_main src 20 NS_internal_main(int,char * *) src 21 wmain src 22 __tmainCRTStartup 23 BaseThreadInitThunk 24 __RtlUserThreadStart 25 _RtlUserThreadStart
Most likely the hung queue has to be the plugin, since user input should keep the browser processing events.
We've got to be careful with this. I'd been floating the idea as a follow-up to async plugin init, but my conversations with Adobe made me somewhat concerned about the consequences. It sounds like Flash makes a lot of NPN calls inside its NPP_Destroy. In my experience Flash does not always check the return codes if one of those NPN calls fails. ;-)
Do we have STR? Let's straight-up diagnose the problem here if we can, rather than just work around it. This is not unique to e10s: non-e10s experiences roughly the same plugin hang in F_1152915508. If we can reproduce this, the full dump from all the processes (including the two FlashPlayerPlugin processes) would be helpful.
Flags: needinfo?(jmathies)
(In reply to Benjamin Smedberg [:bsmedberg] from comment #3) > Do we have STR? Let's straight-up diagnose the problem here if we can, > rather than just work around it. > > This is not unique to e10s: non-e10s experiences roughly the same plugin > hang in F_1152915508. > > If we can reproduce this, the full dump from all the processes (including > the two FlashPlayerPlugin processes) would be helpful. no STR sorry.
Flags: needinfo?(jmathies)
which detector picked this up?
Flags: needinfo?(jmathies)
(In reply to Jim Mathies [:jimm] from comment #5) > which detector picked this up? I don't think we identify which detector picks up a hang, filed bug 1178998.
Flags: needinfo?(jmathies)
tracking-e10s: --- → +
Priority: -- → P3
Resolving as wont fix, plugin support deprecated in Firefox 85.
Status: NEW → RESOLVED
Closed: 5 years ago
Resolution: --- → WONTFIX
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.