Closed Bug 561117 Opened 10 years ago Closed 10 years ago

hang-pair: hang|mozilla::plugins::PPluginInstanceParent::CallNPP_SetWindow(mozilla::plugins::NPRemoteWindow const &) against hang|NtUserMessageCall | SendMessageWorker

Categories

(Core :: Plug-ins, defect)

x86
Windows 7
defect
Not set

Tracking

()

RESOLVED FIXED
Tracking Status
blocking1.9.2 --- .4+
status1.9.2 --- .4-fixed

People

(Reporter: benjamin, Assigned: jimm)

References

Details

(Whiteboard: [qa-noaction-192])

Attachments

(1 file)

browser report:
https://crash-stats.mozilla.com/report/index/b763b09b-4985-4ea0-8282-be96b2100411

plugin report:
https://crash-stats.mozilla.com/report/index/08ebe77e-2f8d-4dd7-83e4-bded22100411

browser stack, in detail:

... hang 	xul.dll!mozilla::plugins::PPluginInstanceParent::CallNPP_SetWindow(window={...})  Line 179	C++
 	xul.dll!mozilla::plugins::PluginInstanceParent::NPP_SetWindow(aWindow=0x15dcb484)  Line 446	C++
 	xul.dll!mozilla::plugins::PluginModuleParent::NPP_SetWindow(instance=0x0dfc8acc, window=0x15dcb484)  Line 418	C++
 	xul.dll!nsNPAPIPluginInstance::SetWindow(window=0x15dcb484)  Line 1429	C++
 	xul.dll!nsObjectFrame::PaintPlugin(aRenderingContext={...}, aDirtyRect={...}, aPluginRect={...})  Line 1830	C++
 	xul.dll!nsDisplayPlugin::Paint(aBuilder=0x002dbbb0, aCtx=0x10677480)  Line 1229	C++
 	xul.dll!nsDisplayList::Paint(aBuilder=0x002dbbb0, aCtx=0x10677480)  Line 405	C++
 	xul.dll!nsDisplayClip::Paint(aBuilder=0x002dbbb0, aCtx=0x10677480)  Line 1201	C++
 	xul.dll!nsLayoutUtils::PaintFrame(aRenderingContext=0x10677480, aFrame=0x11a7f120, aDirtyRegion={...}, aBackstop=0xffffffff, aFlags=0x00000000)  Line 1145	C++
 	xul.dll!PresShell::Paint(aView=0x163eed60, aRenderingContext=0x10677480, aDirtyRegion={...})  Line 5842	C++
 	xul.dll!nsViewManager::RenderViews(aView=0x00000000, aRC={...}, aRegion={...})  Line 534	C++
 	xul.dll!nsViewManager::Refresh(aView=0x00000000, aContext=0x0f2b5490, aRegion=0x10677480, aUpdateFlags=0x62e5bc10)  Line 494	C++
 	xul.dll!nsViewManager::DispatchEvent(aEvent=, aView=, aStatus=)  Line 1008	C++
 	xul.dll!HandleEvent(aEvent=0x00000001)  Line 168	C++
 	xul.dll!nsWindow::DispatchEvent(event=0x002dc0b8, aStatus=nsEventStatus_eIgnore)  Line 2979	C++
 	xul.dll!nsWindow::DispatchWindowEvent(event=0x002dc0b8, aStatus=nsEventStatus_eIgnore)  Line 3013	C++
 	xul.dll!nsWindow::OnPaint(aDC=0x00000000)  Line 568	C++
 	xul.dll!nsWindow::ProcessMessage(msg=0x0000000f, wParam=0x00000000, lParam=0x00000000, aRetValue=0x002dc2e8)  Line 4016	C++
 	xul.dll!nsWindow::WindowProc(hWnd=0x00000001, msg=0x0000000f, wParam=0x00000000, lParam=0x00000000)  Line 3715	C++
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_DispatchClientMessage@24() 	
 	user32.dll!___fnDWORD@4() 	
 	ntdll.dll!_KiUserCallbackDispatcher@12() 	
 	user32.dll!_UpdateWindow@4() 	
 	xul.dll!nsWindow::Update()  Line 2144	C++
 	xul.dll!nsViewManager::UpdateWidgetsForView(aView=0x077357c0)  Line 1604	C++
 	xul.dll!nsViewManager::ForceUpdate()  Line 1869	C++
 	xul.dll!nsViewManager::Composite()  Line 588	C++
 	xul.dll!nsViewManager::EnableRefresh(aUpdateFlags=0x00000002)  Line 1774	C++
 	xul.dll!nsViewManager::EndUpdateViewBatch(aUpdateFlags=0x00000002)  Line 1823	C++
 	xul.dll!nsIViewManager::UpdateViewBatch::EndUpdateViewBatch(aUpdateFlags=0x00000002)  Line 390	C++
 	xul.dll!nsEditor::EndUpdateViewBatch()  Line 4406	C++
 	xul.dll!nsCOMPtr_base::assign_from_qi(qi={...}, iid={...})  Line 96	C++
 	xul.dll!nsEditor::EndPlaceHolderTransaction()  Line 997	C++
 	xul.dll!nsAutoPlaceHolderBatch::~nsAutoPlaceHolderBatch()  Line 65	C++
 	xul.dll!nsPlaintextEditor::InsertText(aStringToInsert={...})  Line 808	C++
 	xul.dll!nsTextControlFrame::SetValue(aValue=)  Line 2689	C++
 	xul.dll!nsCycleCollectingAutoRefCnt::decr(owner=0x0a650500)  Line 199	C++
 	xul.dll!nsGenericElement::Release()  Line 4155	C++
 	xul.dll!nsCOMPtr_base::~nsCOMPtr_base()  Line 82	C++
 	xul.dll!nsTextControlFrame::SetFormProperty(aName=0x00000000, aValue={...})  Line 1897	C++
 	xul.dll!nsHTMLInputElement::SetValueInternal(aValue={...}, aFrame=0x62df4a01, aUserInput=0x00000000)  Line 1117	C++
 	xul.dll!nsHTMLInputElement::SetValue(aValue={...})  Line 930	C++
 	xul.dll!nsIDOMHTMLInputElement_SetValue(cx=0x00b27c00, obj=0x0a676e20, id=0x03616294, vp=0x002dc8c0)  Line 11297	C++
 	js3250.dll!js_SetSprop(cx=0x00000000, sprop=0x079832b0, obj=0x00000000, vp=0x002dc8c0)  Line 636	C++
 	js3250.dll!js_SetPropertyHelper(cx=0x00b27c00, obj=0x0a676e20, id=0x03616294, cacheResult=0x00000001, vp=0x002dc8c0)  Line 4460	C++
 	js3250.dll!js_Interpret(cx=)  Line 1854	C++
 	js3250.dll!js_Invoke(cx=0x00b27c00, argc=0x00000001, vp=0x07c87508, flags=0x00000000)  Line 1368	C++
 	js3250.dll!js_InternalInvoke(cx=0x00b27c00, obj=0x0a665200, fval=0x0a665740, flags=0x00000000, argc=0x00000001, argv=0x002dcc80, rval=0x002dcc80)  Line 1423	C++
 	js3250.dll!js_InternalGetOrSet()  Line 1486	C++
 	js3250.dll!js_SetSprop(cx=0x00000000, sprop=0x0a614770, obj=0x00000000, vp=0x002dcc80)  Line 625	C++
 	js3250.dll!js_SetPropertyHelper(cx=0x00b27c00, obj=0x0a665200, id=0x03616294, cacheResult=0x00000001, vp=0x002dcc80)  Line 4460	C++
 	js3250.dll!js_Interpret(cx=)  Line 1854	C++
 	js3250.dll!js_Invoke(cx=0x00b27c00, argc=0x00000001, vp=0x07c872f0, flags=0x00000000)  Line 1368	C++
 	js3250.dll!js_InternalInvoke(cx=0x00b27c00, obj=0x0763fc20, fval=0x0abbf0c0, flags=0x00000000, argc=0x00000001, argv=0x07c872ec, rval=0x002dcfa8)  Line 1423	C++
 	js3250.dll!JS_CallFunctionValue(cx=0x00b27c00, obj=0x0763fc20, fval=0x0abbf0c0, argc=0x00000001, argv=0x07c872ec, rval=0x002dcfa8)  Line 5113	C++
 	xul.dll!nsJSContext::CallEventHandler(aTarget=0x07645df0, aScope=0x05bf38c0, aHandler=0x0abbf0c0, aargv=0x0f2b51b0, arv=0x002dd038)  Line 2135	C++
 	xul.dll!nsJSEventListener::HandleEvent(aEvent=0x14bdf3a0)  Line 266	C++
 	xul.dll!nsEventListenerManager::HandleEventSubType(aListenerStruct=0x00000000, aListener=0x07640940, aDOMEvent=0x00000000, aCurrentTarget=0x07645df0, aPhaseFlags=0x002dd2e8)  Line 1041	C++
 	xul.dll!nsEventListenerManager::HandleEvent(aPresContext=0x0718a400, aEvent=0x14bdf3d0, aDOMEvent=0x002dd380, aCurrentTarget=0x07645df0, aFlags=0x00000002, aEventStatus=0x002dd384)  Line 1147	C++
 	xul.dll!nsEventTargetChainItem::HandleEventTargetChain(aVisitor={...}, aFlags=0x00000006, aCallback=0x00000000, aMayHaveNewListenerManagers=0x00000000)  Line 334	C++
 	xul.dll!nsEventDispatcher::Dispatch(aTarget=, aPresContext=, aEvent=, aDOMEvent=, aEventStatus=, aCallback=, aTargets=)  Line 577	C++
 	xul.dll!nsEventDispatcher::DispatchDOMEvent(aTarget=0x0760d220, aEvent=0x00000000, aDOMEvent=0x00000000, aPresContext=0x0718a400, aEventStatus=0x002dd424)  Line 636	C++
 	xul.dll!nsEventListenerManager::DispatchEvent(aEvent=0x14bdf3a0, _retval=0x002dd46c)  Line 1274	C++
 	xul.dll!nsDOMEventRTTearoff::DispatchEvent(aEvt=0x14bdf3a0, _retval=0x002dd46c)  Line 1672	C++
 	xul.dll!nsIDOMEventTarget_DispatchEvent(cx=0x00b27c00, argc=0x00000001, vp=0x07c872c4)  Line 7640	C++
 	js3250.dll!js_Interpret(cx=0x00b27c00)  Line 2208	C++
 	js3250.dll!js_Invoke(cx=0x00b27c00, argc=0x00000001, vp=0x07c872b0, flags=0x00000000)  Line 1368	C++
 	js3250.dll!js_InternalInvoke(cx=0x00b27c00, obj=0x0763fec0, fval=0x0763ff20, flags=0x00000000, argc=0x00000001, argv=0x002dd880, rval=0x002dd880)  Line 1423	C++
 	js3250.dll!js_InternalGetOrSet()  Line 1486	C++
 	js3250.dll!js_SetSprop(cx=0x00000000, sprop=0x04ea7ab0, obj=0x00000000, vp=0x002dd880)  Line 625	C++
 	js3250.dll!js_SetPropertyHelper(cx=0x00b27c00, obj=0x0763fec0, id=0x071bbb44, cacheResult=0x00000001, vp=0x002dd880)  Line 4460	C++
 	js3250.dll!js_Interpret(cx=)  Line 1854	C++
 	js3250.dll!js_Invoke(cx=0x00b27c00, argc=0x00000001, vp=0x07c87280, flags=0x00000000)  Line 1368	C++
 	js3250.dll!js_InternalInvoke(cx=0x00b27c00, obj=0x0763fec0, fval=0x0764b000, flags=0x00000000, argc=0x00000001, argv=0x002ddc40, rval=0x002ddc40)  Line 1423	C++
 	js3250.dll!js_InternalGetOrSet()  Line 1486	C++
 	js3250.dll!js_SetSprop(cx=0x00000000, sprop=0x04ea7ad0, obj=0x00000000, vp=0x002ddc40)  Line 625	C++
 	js3250.dll!js_SetPropertyHelper(cx=0x00b27c00, obj=0x0763fec0, id=0x0781136c, cacheResult=0x00000001, vp=0x002ddc40)  Line 4460	C++
 	js3250.dll!js_Interpret(cx=)  Line 1854	C++
 	js3250.dll!js_Interpret(cx=)  Line 2208	C++
 	js3250.dll!js_Invoke(cx=0x00b27c00, argc=0x00000001, vp=0x07c8722c, flags=0x00000000)  Line 1368	C++
 	js3250.dll!js_InternalInvoke(cx=0x00b27c00, obj=0x0764b140, fval=0x0764b300, flags=0x00000000, argc=0x00000001, argv=0x002de000, rval=0x002de000)  Line 1423	C++
 	js3250.dll!js_InternalGetOrSet()  Line 1486	C++
 	js3250.dll!js_SetSprop(cx=0x00000000, sprop=0x04ea7c90, obj=0x00000000, vp=0x002de000)  Line 625	C++
 	js3250.dll!js_SetPropertyHelper(cx=0x00b27c00, obj=0x0764b140, id=0x071bbb44, cacheResult=0x00000001, vp=0x002de000)  Line 4460	C++
 	js3250.dll!js_Interpret(cx=)  Line 1854	C++
 	xul.dll!XPC_WN_Helper_GetProperty(cx=0x0000071e, obj=0x0000ffff, idval=0x00000001, vp=0x00000000)  Line 1026	C++
 	xul.dll!nsCOMPtr_base::assign_from_qi(qi={...}, iid={...})  Line 96	C++
 	xul.dll!XPC_WN_GetterSetter(cx=0x62e8826c, obj=0x62e882da, argc=0x00002000, argv=0x00000000, vp=0x002de698)  Line 1763	C++
 	xul.dll!XPCConvert::NativeInterface2JSObject(lccx=, d=, dest=, src=, iid=, Interface=, cache=, scope=, allowNativeWrapper=, isGlobal=, pErr=)  Line 1400	C++
 	xul.dll!XPCConvert::NativeData2JS(lccx={...}, d=0x002de698, s=0x002de8d4, type={...}, iid=0x51ae56a1, scope=0x09ff8280, pErr=0x630f8b43)  Line 471	C++
 	xul.dll!XPCConvert::NativeData2JS(ccx={...}, d=0x00000001, s=0x00000000, type={...}, iid=0x07c87020, scope=0x00000000, pErr=0x00000000)  Line 2979	C++
 	xul.dll!nsXPCWrappedJSClass::CallMethod(wrapper=0x0a017f00, methodIndex=0x0003, info=0x03a130e0, nativeParams=0x002de8d4)  Line 1697	C++
 	xul.dll!nsXPCWrappedJS::CallMethod(methodIndex=0x0003, info=0x03a130e0, params=0x002de8d4)  Line 571	C++
 	xul.dll!PrepareAndDispatch(self=0x0a019fb0, methodIndex=0x00000003, args=0x002de98c, stackBytesToPop=0x002de97c)  Line 114	C++
 	xul.dll!SharedStub()  Line 142	C++
 	xul.dll!nsEventListenerManager::HandleEventSubType(aListenerStruct=0x00000000, aListener=0x0a019fb0, aDOMEvent=0x00000000, aCurrentTarget=0x0760d1c0, aPhaseFlags=0x002dead0)  Line 1041	C++
 	xul.dll!nsEventListenerManager::HandleEvent(aPresContext=0x0718a400, aEvent=0x002ded74, aDOMEvent=0x002deb68, aCurrentTarget=0x0760d1c0, aFlags=0x00000002, aEventStatus=0x002deb6c)  Line 1147	C++
 	xul.dll!nsEventTargetChainItem::HandleEventTargetChain(aVisitor={...}, aFlags=0x00000006, aCallback=0x002debf0, aMayHaveNewListenerManagers=0x00000000)  Line 334	C++
 	xul.dll!nsEventDispatcher::Dispatch(aTarget=, aPresContext=, aEvent=, aDOMEvent=, aEventStatus=, aCallback=, aTargets=)  Line 577	C++
 	xul.dll!nsEventStateManager::AddRef()  Line 974	C++
 	xul.dll!PresShell::HandleEventInternal(aEvent=, aView=, aStatus=)  Line 6518	C++
 	xul.dll!PresShell::HandlePositionedEvent(aView=0x077357c0, aTargetFrame=0x00000000, aEvent=0x002ded74, aEventStatus=0x002dec9c)  Line 6362	C++
 	xul.dll!PresShell::HandleEvent(aView=0x077357c0, aEvent=0x002ded74, aEventStatus=0x002dec9c)  Line 6297	C++
 	xul.dll!nsViewManager::HandleEvent(aView=0x00000000, aPoint={...}, aEvent=0x002ded74, aCaptured=0x002ded04)  Line 1227	C++
 	xul.dll!nsViewManager::DispatchEvent(aEvent=0x002ded74, aView=0x077357c0, aStatus=0x002ded38)  Line 1211	C++
 	xul.dll!HandleEvent(aEvent=0x00000000)  Line 168	C++
 	xul.dll!nsWindow::DispatchEvent(event=0x002ded74, aStatus=nsEventStatus_eIgnore)  Line 2979	C++
 	xul.dll!nsWindow::DispatchWindowEvent(event=0x00000000)  Line 3008	C++
 	xul.dll!nsWindow::OnMouseWheel(msg=0x00000000, wParam=0x00000001, lParam=0x00a902ce, getWheelInfo=0x002def30, result=0x00000000, aRetValue=0x002df118)  Line 5379	C++
 	xul.dll!__SEH_epilog4_GS() 	C++
 	xul.dll!nsWindow::HandleScrollingPlugins(aMsg=0x0000020a, aWParam=0xff880000, aLParam=0x00a902ce, aHandled=0x00000000, aRetValue=0x002df118, aQuitProcessing=0x00000000)  Line 6173	C++
 	xul.dll!nsWindow::OnMouseWheel(msg=0x00000000, wParam=0x00000001, lParam=0x00a902ce, getWheelInfo=0x00040c1a, result=0x00000000, aRetValue=0x002df118)  Line 5331	C++
 	xul.dll!__SEH_epilog4_GS() 	C++
 	xul.dll!nsWindow::WindowProc(hWnd=0x00000001, msg=0x0000020a, wParam=0xff880000, lParam=0x00a902ce)  Line 3715	C++
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_CallWindowProcAorW@24() 	
 	user32.dll!_CallWindowProcW@20() 	
>	xul.dll!mozilla::plugins::PluginInstanceParent::PluginWindowHookProc(hWnd=0x00040c1a, message=0x0000020a, wParam=0xff880000, lParam=0x00a902ce)  Line 943	C++
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_CallWindowProcAorW@24() 	
 	user32.dll!_CallWindowProcW@20() 	
 	xul.dll!PluginWndProc(hWnd=0x00040c1a, msg=0x00202d88, wParam=0xff880000, lParam=0x00a902ce)  Line 360	C++
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_DispatchClientMessage@24() 	
 	user32.dll!___fnDWORD@4() 	
 	ntdll.dll!_KiUserCallbackDispatcher@12() 	
 	user32.dll!__PeekMessage@24() 	
 	user32.dll!_PeekMessageW@20() 	
 	xul.dll!nsAppShell::ProcessNextNativeEvent(mayWait=0x00000001)  Line 172	C++

plugin stack, in detail:
 	user32.dll!_NtUserMessageCall@28() 	
 	user32.dll!_SendMessageWorker@24() 	
 	user32.dll!_SendMessageW@16() 	
 	user32.dll!_RealDefWindowProcWorker@24() 	
 	user32.dll!_RealDefWindowProcW@16() 	
>	user32.dll!_DefWindowProcW@16() 	
 	NPSWF32.dll!729611e3() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for NPSWF32.dll]	
 	msctf.dll!MemCache_Add() 	
 	0290f29c()	
 	msctf.dll!CInputContext::_UpdateKeyEventFilterCallback() 	
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_CallWindowProcAorW@24() 	
 	user32.dll!_CallWindowProcW@20() 	
 	xul.dll!mozilla::plugins::PluginInstanceChild::PluginWindowProc(hWnd=0x00ea03ae, message=0x0000020a, wParam=0x00780008, lParam=0x028602f9)  Line 836	C++
 	user32.dll!_InternalCallWinProc@20() 	
 	user32.dll!_UserCallWinProcCheckWow@32() 	
 	user32.dll!_DispatchMessageWorker@8() 	
 	user32.dll!_DispatchMessageW@4() 	
 	xul.dll!base::MessagePumpForUI::ProcessMessageHelper(msg={...})  Line 364	C++

The plugin, via something in IME, appears to be dispatching a WM_MOUSEWHEEL event at the plugin wrapper window. jimm, whack-a-mole!

There were only 8 of these in my hang report, so it may not be a blocker, but sounds like something we could fix easily.
OS: Linux → Windows 7
After further analysis, this same message also appears to be responsible for most of the child stacks

15 hang|KiFastSystemCallRet | NtUserMessageCall | SendMessageW 
15 hang|KiFastSystemCallRet | NtUserMessageCall | RealDefWindowProcA

So I think it should block.
Attached patch patch.txtSplinter Review
Attachment #440825 - Flags: review?
Attachment #440825 - Flags: review? → review?(benjamin)
Attachment #440825 - Flags: review?(benjamin) → review+
http://hg.mozilla.org/mozilla-central/rev/9223fe0430e0
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Chris: you checked this in without approval. I'll give it a post-hoc approval, but please do NOT do this again.
blocking1.9.2: ? → .4+
AIIEEE!!  I lumped this in with a group with other 1.9.2 stuff that had approval and guess I didn't check this one, apologies!
Is there a mechanism to trigger this problem that can be used for bug verification purposes?
We don't know of one, no; this bug came entirely out of hang report analysis. It's obviously related to mouse-wheel events of some sort, so you could try using the mousewheel on various sites to try and come up with a set of STR. Otherwise we'll have to wait for another beta push to verify using crash data.
Whiteboard: [qa-noaction-192]
You need to log in before you can comment on or make changes to this bug.