Closed Bug 658194 Opened 14 years ago Closed 12 years ago

Firefox Hangs when loading the SpacEyes3D Plugin

Categories

(Core Graveyard :: Plug-ins, defect)

x86
Windows XP
defect
Not set
critical

Tracking

(Not tracked)

RESOLVED INCOMPLETE

People

(Reporter: dev, Unassigned)

References

()

Details

Attachments

(2 files, 2 obsolete files)

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17 GTB7.1 ( .NET CLR 3.5.30729; .NET4.0E) Build Identifier: Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Our plugin doesn't work with Firefox 4 when executed in the plugin container. It works fine when the plugin is executed inside the FF process. This can be achieved using the following preference : dom.ipc.plugins.enabled.npsp3dviewer.dll = false We would like to integrate this preference in the default firefox prefs. Reproducible: Always Steps to Reproduce: 1.Install the plugin : http://www.spaceyes3d.com/plugin/download/SpacEyes3DViewerPlugin.exe 2.Go to the basic test page : http://www.spaceyes3d.com/plugin/demos/basic/basic.html Actual Results: The plugin starts to load then FF hangs. Expected Results: FF should not hang :)
Component: Extension Compatibility → Plug-ins
Product: Firefox → Core
QA Contact: extension.compatibility → plugins
Version: unspecified → 2.0 Branch
Attached patch This is a proposed patch. (obsolete) — Splinter Review
Version: 2.0 Branch → Trunk
The previous patch was buggy.
Attachment #533638 - Attachment is obsolete: true
Comment on attachment 536299 [details] [diff] [review] Fix of the previously submitted patch Review of attachment 536299 [details] [diff] [review]: -----------------------------------------------------------------
Attachment #536299 - Flags: review?(benjamin)
This is a crappy workaround. Do you know why your plugin hangs? It would be better to just fix the plugin.
Firefox stack: > ntdll.dll!_KiFastSystemCallRet@0() user32.dll!_NtUserMessageCall@28() + 0xc bytes user32.dll!_SendMessageWorker@20() - 0x12f8e bytes user32.dll!_SendMessageW@16() + 0x49 bytes xul.dll!nsWindow::HandleScrollingPlugins(unsigned int aMsg=522, unsigned int aWParam=7864320, long aLParam=26411500, int & aHandled=0, long * aRetValue=0x0031d0d8, int & aQuitProcessing=0) Line 7944 C++ xul.dll!nsWindow::OnMouseWheel(unsigned int msg=0, unsigned int wParam=1, long lParam=26411500, int & getWheelInfo=589988, int & result=0, long * aRetValue=0x0031d0d8) Line 6721 + 0x1a bytes C++ xul.dll!nsWindow::ProcessMessage(unsigned int msg=522, unsigned int & wParam=7864320, long & lParam=26411500, long * aRetValue=0x0031d0d8) + 0x34c3f7 bytes C++ xul.dll!nsWindow::WindowProcInternal(HWND__ * hWnd=0x02405ad0, unsigned int msg=1, unsigned int wParam=7864320, long lParam=26411500) Line 4629 + 0x2a bytes C++ xul.dll!CallWindowProcCrashProtected(long (HWND__ *, unsigned int, unsigned int, long)* wndProc=0x6ba0b760, HWND__ * hWnd=0x000900a4, unsigned int msg=522, unsigned int wParam=7864320, long lParam=26411500) Line 65 + 0x1e bytes C++ xul.dll!nsWindow::WindowProc(HWND__ * hWnd=0x000900a4, unsigned int msg=522, unsigned int wParam=7864320, long lParam=26411500) Line 4578 + 0x1a bytes C++ user32.dll!_InternalCallWinProc@20() + 0x23 bytes user32.dll!_UserCallWinProcCheckWow@32() + 0xb3 bytes user32.dll!_DispatchMessageWorker@8() + 0xe6 bytes user32.dll!_DispatchMessageW@4() + 0xf bytes xul.dll!nsAppShell::ProcessNextNativeEvent(int mayWait=1805528086) Line 339 + 0xb bytes C++ Plugin stack: ntdll.dll!_KiFastSystemCallRet@0() ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc bytes kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x61 bytes user32.dll!_RealMsgWaitForMultipleObjectsEx@20() + 0xd7 bytes user32.dll!_MsgWaitForMultipleObjects@20() + 0x1f bytes xul.dll!mozilla::ipc::RPCChannel::WaitForNotify() Line 904 C++ xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x00802830, IPC::Message * reply=0x0019e748) Line 201 + 0x6 bytes C++ xul.dll!mozilla::plugins::PPluginScriptableObjectChild::CallHasMethod(mozilla::plugins::PPluginIdentifierChild * aId=0x0019e5e4, bool * aHasMethod=0x0019e78b) Line 167 C++ xul.dll!mozilla::plugins::PluginScriptableObjectChild::ScriptableHasMethod(NPObject * aObject=0x008193e0, void * aName=0x00817730) Line 122 C++ xul.dll!mozilla::plugins::child::_hasmethod(_NPP * aNPP=0x00841074, NPObject * aNPObj=0x008193e0, void * aMethodName=0x00817730) Line 1401 + 0x7 bytes C++ npsp3dviewer.dll!01284fb6() [Frames below may be incorrect and/or missing, no symbols loaded for npsp3dviewer.dll] QtCore4.dll!670143d9() QtCore4.dll!670e3df4() npsp3dviewer.dll!012873d0() npsp3dviewer.dll!01287851() QtCore4.dll!670e3df4() npsp3dviewer.dll!012b8d7e() npsp3dviewer.dll!012bdab9() npsp3dviewer.dll!012b8119() kernel32.dll!_HeapFree@12() + 0x14 bytes qt-mt338.dll!01c66437() qt-mt338.dll!01b46585() qt-mt338.dll!01ace555() qt-mt338.dll!01a869b8() qt-mt338.dll!01a87a46() qt-mt338.dll!01a626db() qt-mt338.dll!01a6579b() qt-mt338.dll!01a65d70() kernel32.dll!_HeapFree@12() + 0x14 bytes > msvcr71.dll!free(void * pBlock=0x03e153f0) Line 103 C 00000206() user32.dll!_InternalCallWinProc@20() + 0x23 bytes user32.dll!_UserCallWinProcCheckWow@32() + 0xb3 bytes user32.dll!_CallWindowProcAorW@24() + 0x51 bytes user32.dll!_CallWindowProcW@20() + 0x1b bytes opengl32.dll!_wglWndProc@16() + 0x20e bytes user32.dll!_InternalCallWinProc@20() + 0x23 bytes user32.dll!_UserCallWinProcCheckWow@32() + 0xb3 bytes user32.dll!_DispatchClientMessage@20() + 0x4b bytes user32.dll!___fnDWORD@4() + 0x24 bytes ntdll.dll!_KiUserCallbackDispatcher@12() + 0x2e bytes user32.dll!_NtUserPeekMessage@20() + 0xc bytes user32.dll!__PeekMessage@24() + 0x2d bytes user32.dll!_PeekMessageW@20() - 0x5fef bytes xul.dll!base::MessagePumpForUI::ProcessNextWindowsMessage() Line 339 + 0x11 bytes C++ It appears that the plugin is making a NPRuntime call from within the scroll message being sent here: http://hg.mozilla.org/mozilla-central/annotate/7b62ac8e1715/widget/src/windows/nsWindow.cpp#l7648 Firefox is blocked in SendMessage and therefore not responding to RPC calls. I'm not sure whether that SendMessage is necessary, but if it is we probably need to be using SendMessageCallback and spinning an RPC loop here. The workaround from the PoV of spaceyes3d is not to make npruntime calls from within scrollwheel message handlers, I think. If you have PDBs for spaceyes3d available, I could provide a more useful plugin-side stack.
Status: UNCONFIRMED → NEW
Ever confirmed: true
> I'm not sure whether that SendMessage is necessary Currently, we need to do it for supporting mouse wheel scroll in plugins. However, I find a document in MSDN, according to that, we shouldn't send WM_MOUSE(H)WHEEL message to sub windows. And for DOM mouse wheel events, I think we should send the mouse wheel event via DOM event like key events in the future.
The question was not whether we should deliver the message, the question was whether we could PostMessage instead of SendMessage, because any SendMessage which may be processed by a plugin is a potential deadlock.
(In reply to comment #7) > The question was not whether we should deliver the message, the question was > whether we could PostMessage instead of SendMessage, because any SendMessage > which may be processed by a plugin is a potential deadlock. If we changed it as PostMessage, we cannot see whether the next WM_MOUSE(H)WHEEL message comes from mouse driver or the plugin window. So, don't do it.
Masayuki, please figure out a way to remove or fix this SendMessage, because SendMessage is a blocking call that we should not be making any more.
Assignee: nobody → masayuki
Wait, we unlock the SendMessage in PluginInstanceChild::PluginWindowProcInternal(). http://mxr.mozilla.org/mozilla-central/source/dom/plugins/ipc/PluginInstanceChild.cpp#1270 Why does this bug happen? # Anyway, looks like our WM_MOUSEWHEEL handling has been completely broken by OOPP.
Hmmm, I installed the plugin but I cannot reproduce the hangup... I'm create a patch but I cannot test myself...
I succeeded to reproduce the bug. It seems that the plugin rewrites our profile for disabling OOPP forcibly :-(
(In reply to comment #12) > I succeeded to reproduce the bug. It seems that the plugin rewrites our > profile for disabling OOPP forcibly :-( You are right. We have modified the setup of our plugin to add a settings to disable the execution of the plugin in OOP mode. The previous setup is still available here : http://www.spaceyes3d.com/plugin/download/SpacEyes3DViewerPlugin_4_1_0.exe Sorry for the inconvenience.
This patch cannot fix this bug but it's helpful to remove SendMessage() from mouse wheel handling. When nsWindow receives WM_MOUSEWHEEL or WM_MOUSEHWHEEL, this patch checks which window should handle it. It calls ProcessMessage() with internal message for preventing to make infinite message loop. By this trick, the handlers can handle mouse wheel events simply even if cursor is on a plugin window because we can use PostMessage() for now. Test builds will be here: http://ftp.mozilla.org/pub/mozilla.org/firefox/try-builds/masayuki@d-toybox.com-ea50275940dd
Attachment #537961 - Flags: review?(jmathies)
Benjamin: My patch make asynchronous mouse wheel handling completely. I.e., SendMessage() is now completely removed from mouse wheel message handling code. However, I still reproduce the hangup. So, There is another issue.
And I can reproduce this bug without mouse wheel operation...
Masayuki, what are the stacks from the hang you are seeing? The stacks are the only thing that will guide us to a solution.
breaks firefox.exe after hanging-up. > ntdll.dll!773e014d() > [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] > ntdll.dll!773e014d() > KernelBase.dll!76050962() > kernel32.dll!75a71a2c() > user32.dll!7666086a() >> nspr4.dll!_PR_MD_UNLOCK(_MDLock * lock=0x177fe0d4) Line 347 C > nspr4.dll!PR_Unlock(PRLock * lock=0x1786b888) Line 347 + 0xc bytes C > 00000088() > xul.dll!mozilla::ipc::RPCChannel::WaitForNotify() Line 919 + 0x1a bytes C++ > xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x16940e58, IPC::Message * reply=0x0039656c) Line 201 + 0xb bytes C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectParent::CallHasProperty(mozilla::plugins::PPluginIdentifierParent * aId=0x17920898, bool * aHasProperty=0x003965e7) Line 287 + 0x16 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectParent::ScriptableHasProperty(NPObject * aObject=0x0c7e6ed0, void * aName=0x0e62c4f0) Line 312 + 0x17 bytes C++ > xul.dll!NPObjWrapper_NewResolve(JSContext * cx=0x1784fa90, JSObject * obj=0x0ee7fe48, jsid id={...}, unsigned int flags=0x00000001, JSObject * * objp=0x0039667c) Line 1642 + 0x12 bytes C++ > mozjs.dll!CallResolveOp(JSContext * cx=0x1784fa90, JSObject * start=0x132f94a0, JSObject * obj=0x0ee7fe48, jsid id={...}, unsigned int flags=0x00000001, JSObject * * objp=0x00396724, JSProperty * * propp=0x00396718, bool * recursedp=0x003966cf) Line 4884 + 0x17 bytes C++ > mozjs.dll!LookupPropertyWithFlagsInline(JSContext * cx=0x1784fa90, JSObject * obj=0x0ee7fe48, jsid id={...}, unsigned int flags=0x00000001, JSObject * * objp=0x00396724, JSProperty * * propp=0x00396718) Line 4943 + 0x25 bytes C++ > mozjs.dll!js_GetPropertyHelperWithShapeInline(JSContext * cx=0x1784fa90, JSObject * obj=0x132f94a0, JSObject * receiver=0x132f94a0, jsid id={...}, unsigned int getHow=0x00000000, js::Value * vp=0x00396850, const js::Shape * * shapeOut=0x00396750, JSObject * * holderOut=0x00396754) Line 5317 + 0x23 bytes C++ > mozjs.dll!js_GetPropertyHelperInline(JSContext * cx=0x1784fa90, JSObject * obj=0x132f94a0, JSObject * receiver=0x132f94a0, jsid id={...}, unsigned int getHow=0x00000000, js::Value * vp=0x00396850) Line 5419 + 0x25 bytes C++ > mozjs.dll!js_GetProperty(JSContext * cx=0x1784fa90, JSObject * obj=0x132f94a0, JSObject * receiver=0x132f94a0, jsid id={...}, js::Value * vp=0x00396850) Line 5432 + 0x1b bytes C++ > mozjs.dll!JSObject::getProperty(JSContext * cx=0x1784fa90, JSObject * receiver=0x132f94a0, jsid id={...}, js::Value * vp=0x00396850) Line 1149 + 0x2c bytes C++ > mozjs.dll!JSObject::getProperty(JSContext * cx=0x1784fa90, jsid id={...}, js::Value * vp=0x00396850) Line 1154 C++ > mozjs.dll!JS_GetPropertyById(JSContext * cx=0x1784fa90, JSObject * obj=0x132f94a0, jsid id={...}, jsval_layout * vp=0x00396850) Line 3758 + 0x1d bytes C++ > xul.dll!GetProperty(JSContext * cx=0x1784fa90, JSObject * obj=0x132f94a0, void * id=0x0e62c4f0, jsval_layout * rval=0x00396850) Line 609 + 0x25 bytes C++ > xul.dll!nsJSObjWrapper::NP_HasMethod(NPObject * npobj=0x0c7e6c90, void * id=0x0e62c4f0) Line 642 + 0x18 bytes C++ > xul.dll!mozilla::plugins::parent::_hasmethod(_NPP * npp=0x0cab9234, NPObject * npobj=0x0c7e6c90, void * methodName=0x0e62c4f0) Line 1857 + 0x12 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectParent::AnswerHasMethod(mozilla::plugins::PPluginIdentifierParent * aId=0x17920898, bool * aHasMethod=0x00396d0f) Line 727 + 0x24 bytes C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectParent::OnCallReceived(const IPC::Message & __msg={...}, IPC::Message * & __reply=0x00000000) Line 726 + 0x1b bytes C++ > xul.dll!mozilla::plugins::PPluginModuleParent::OnCallReceived(const IPC::Message & __msg={...}, IPC::Message * & __reply=0x00000000) Line 936 + 0x15 bytes C++ > xul.dll!mozilla::ipc::RPCChannel::DispatchIncall(const IPC::Message & call={...}) Line 516 + 0x20 bytes C++ > xul.dll!mozilla::ipc::RPCChannel::Incall(const IPC::Message & call={...}, unsigned int stackDepth=0x00000001) Line 503 C++ > xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x16940e58, IPC::Message * reply=0x003970c4) Line 312 C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectParent::CallInvoke(mozilla::plugins::PPluginIdentifierParent * aId=0x179205c8, const InfallibleTArray<mozilla::plugins::Variant> & aArgs={...}, mozilla::plugins::Variant * aResult=0x00397148, bool * aSuccess=0x0039715f) Line 196 + 0x16 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectParent::ScriptableInvoke(NPObject * aObject=0x0c7e6ed0, void * aName=0x0eee1420, const _NPVariant * aArgs=0x003971bc, unsigned int aArgCount=0x00000002, _NPVariant * aResult=0x00397264) Line 218 + 0x24 bytes C++ > xul.dll!CallNPMethodInternal(JSContext * cx=0x1784fa90, JSObject * obj=0x0ee7fe48, unsigned int argc=0x00000002, jsval_layout * argv=0x08520308, jsval_layout * rval=0x085202f8, int ctorCall=0x00000000) Line 1483 + 0x24 bytes C++ > xul.dll!CallNPMethod(JSContext * cx=0x1784fa90, unsigned int argc=0x00000002, jsval_layout * vp=0x085202f8) Line 1536 + 0x1e bytes C++ > mozjs.dll!js::CallJSNative(JSContext * cx=0x1784fa90, int (JSContext *, unsigned int, js::Value *)* native=0x584c6ba0, const js::CallArgs & args={...}) Line 282 + 0x19 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 656 + 0x14 bytes C++ > mozjs.dll!js::Interpret(JSContext * cx=0x1784fa90, js::StackFrame * entryFrame=0x085201f8, js::InterpMode interpMode=JSINTERP_NORMAL) Line 4553 + 0x12 bytes C++ > mozjs.dll!js::RunScript(JSContext * cx=0x1784fa90, JSScript * script=0x174bed18, js::StackFrame * fp=0x085201f8) Line 613 + 0xf bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 686 + 0x11 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, js::InvokeArgsGuard & args={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 169 + 0x1a bytes C++ > mozjs.dll!js_fun_call(JSContext * cx=0x1784fa90, unsigned int argc=0x00000001, js::Value * vp=0x085201b0) Line 2148 + 0xf bytes C++ > mozjs.dll!js::CallJSNative(JSContext * cx=0x1784fa90, int (JSContext *, unsigned int, js::Value *)* native=0x5c52d5c6, const js::CallArgs & args={...}) Line 282 + 0x19 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 656 + 0x14 bytes C++ > mozjs.dll!js::Interpret(JSContext * cx=0x1784fa90, js::StackFrame * entryFrame=0x08520180, js::InterpMode interpMode=JSINTERP_NORMAL) Line 4553 + 0x12 bytes C++ > mozjs.dll!js::RunScript(JSContext * cx=0x1784fa90, JSScript * script=0x0bc864a8, js::StackFrame * fp=0x08520180) Line 613 + 0xf bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 686 + 0x11 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, js::InvokeArgsGuard & args={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 169 + 0x1a bytes C++ > mozjs.dll!js::ExternalInvoke(JSContext * cx=0x1784fa90, const js::Value & thisv={...}, const js::Value & fval={...}, unsigned int argc=0x00000001, js::Value * argv=0x00399da8, js::Value * rval=0x00399d68) Line 805 + 0xf bytes C++ > mozjs.dll!JS_CallFunctionValue(JSContext * cx=0x1784fa90, JSObject * obj=0x0ee832e0, jsval_layout fval={...}, unsigned int argc=0x00000001, jsval_layout * argv=0x00399da8, jsval_layout * rval=0x00399d68) Line 5088 + 0x45 bytes C++ > xul.dll!nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS * wrapper=0x17aa3e68, unsigned short methodIndex=0x0003, const XPTMethodDescriptor * info=0x073bcd40, nsXPTCMiniVariant * nativeParams=0x00399e8c) Line 1662 + 0x38 bytes C++ > xul.dll!nsXPCWrappedJS::CallMethod(unsigned short methodIndex=0x0003, const XPTMethodDescriptor * info=0x073bcd40, nsXPTCMiniVariant * params=0x00399e8c) Line 587 C++ > xul.dll!PrepareAndDispatch(nsXPTCStubBase * self=0x1748b7e0, unsigned int methodIndex=0x00000003, unsigned int * args=0x00399f4c, unsigned int * stackBytesToPop=0x00399f3c) Line 114 + 0x21 bytes C++ > xul.dll!SharedStub() Line 142 C++ > xul.dll!nsEventListenerManager::HandleEventSubType(nsListenerStruct * aListenerStruct=0x0c52a8d8, nsIDOMEventListener * aListener=0x1748b7e0, nsIDOMEvent * aDOMEvent=0x17a1d2d0, nsPIDOMEventTarget * aCurrentTarget=0x0c6879a8, unsigned int aPhaseFlags=0x00000006, nsCxPusher * aPusher=0x0039a2b0) Line 1136 + 0x12 bytes C++ > xul.dll!nsEventListenerManager::HandleEventInternal(nsPresContext * aPresContext=0x0bca77a8, nsEvent * aEvent=0x17a1d330, nsIDOMEvent * * aDOMEvent=0x0039a2a0, nsPIDOMEventTarget * aCurrentTarget=0x0c6879a8, unsigned int aFlags=0x00000006, nsEventStatus * aEventStatus=0x0039a2a4, nsCxPusher * aPusher=0x0039a2b0) Line 1233 + 0x27 bytes C++ > xul.dll!nsEventListenerManager::HandleEvent(nsPresContext * aPresContext=0x0bca77a8, nsEvent * aEvent=0x17a1d330, nsIDOMEvent * * aDOMEvent=0x0039a2a0, nsPIDOMEventTarget * aCurrentTarget=0x0c6879a8, unsigned int aFlags=0x00000006, nsEventStatus * aEventStatus=0x0039a2a4, nsCxPusher * aPusher=0x0039a2b0) Line 147 C++ > xul.dll!nsEventTargetChainItem::HandleEvent(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=0x00000006, int aMayHaveNewListenerManagers=0x00000000, nsCxPusher * aPusher=0x0039a2b0) Line 216 C++ > xul.dll!nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=0x00000006, nsDispatchingCallback * aCallback=0x00000000, int aMayHaveNewListenerManagers=0x00000000, nsCxPusher * aPusher=0x0039a2b0) Line 346 C++ > xul.dll!nsEventDispatcher::Dispatch(nsISupports * aTarget=0x0c6879a8, nsPresContext * aPresContext=0x0bca77a8, nsEvent * aEvent=0x17a1d330, nsIDOMEvent * aDOMEvent=0x17a1d2d0, nsEventStatus * aEventStatus=0x0039a3c0, nsDispatchingCallback * aCallback=0x00000000, nsCOMArray<nsPIDOMEventTarget> * aTargets=0x00000000) Line 648 + 0x1e bytes C++ > xul.dll!nsEventDispatcher::DispatchDOMEvent(nsISupports * aTarget=0x0c6879a8, nsEvent * aEvent=0x00000000, nsIDOMEvent * aDOMEvent=0x17a1d2d0, nsPresContext * aPresContext=0x0bca77a8, nsEventStatus * aEventStatus=0x0039a3c0) Line 711 + 0x1d bytes C++ > xul.dll!nsDocument::DispatchEvent(nsIDOMEvent * aEvent=0x17a1d2d0, int * _retval=0x0039a40c) Line 6305 + 0x22 bytes C++ > xul.dll!nsIDOMEventTarget_DispatchEvent(JSContext * cx=0x1784fa90, unsigned int argc=0x00000001, jsval_layout * vp=0x08520150) Line 14036 + 0x16 bytes C++ > mozjs.dll!js::CallJSNative(JSContext * cx=0x1784fa90, int (JSContext *, unsigned int, js::Value *)* native=0x582d3f00, const js::CallArgs & args={...}) Line 282 + 0x19 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 656 + 0x14 bytes C++ > mozjs.dll!js::Interpret(JSContext * cx=0x1784fa90, js::StackFrame * entryFrame=0x08520118, js::InterpMode interpMode=JSINTERP_NORMAL) Line 4553 + 0x12 bytes C++ > mozjs.dll!js::RunScript(JSContext * cx=0x1784fa90, JSScript * script=0x0c65ce20, js::StackFrame * fp=0x08520118) Line 613 + 0xf bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 686 + 0x11 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, js::InvokeArgsGuard & args={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 169 + 0x1a bytes C++ > mozjs.dll!js_fun_apply(JSContext * cx=0x1784fa90, unsigned int argc=0x00000002, js::Value * vp=0x085200c8) Line 2203 + 0xf bytes C++ > mozjs.dll!js::CallJSNative(JSContext * cx=0x1784fa90, int (JSContext *, unsigned int, js::Value *)* native=0x5c529c9b, const js::CallArgs & args={...}) Line 282 + 0x19 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 656 + 0x14 bytes C++ > mozjs.dll!js::Interpret(JSContext * cx=0x1784fa90, js::StackFrame * entryFrame=0x08520038, js::InterpMode interpMode=JSINTERP_NORMAL) Line 4553 + 0x12 bytes C++ > mozjs.dll!js::RunScript(JSContext * cx=0x1784fa90, JSScript * script=0x08d94720, js::StackFrame * fp=0x08520038) Line 613 + 0xf bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 686 + 0x11 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x1784fa90, js::InvokeArgsGuard & args={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 169 + 0x1a bytes C++ > mozjs.dll!js::ExternalInvoke(JSContext * cx=0x1784fa90, const js::Value & thisv={...}, const js::Value & fval={...}, unsigned int argc=0x00000001, js::Value * argv=0x0039cf2c, js::Value * rval=0x0039ceec) Line 805 + 0xf bytes C++ > mozjs.dll!JS_CallFunctionValue(JSContext * cx=0x1784fa90, JSObject * obj=0x0ee832e0, jsval_layout fval={...}, unsigned int argc=0x00000001, jsval_layout * argv=0x0039cf2c, jsval_layout * rval=0x0039ceec) Line 5088 + 0x45 bytes C++ > xul.dll!nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS * wrapper=0x17aa0d68, unsigned short methodIndex=0x0003, const XPTMethodDescriptor * info=0x073bcd40, nsXPTCMiniVariant * nativeParams=0x0039d010) Line 1662 + 0x38 bytes C++ > xul.dll!nsXPCWrappedJS::CallMethod(unsigned short methodIndex=0x0003, const XPTMethodDescriptor * info=0x073bcd40, nsXPTCMiniVariant * params=0x0039d010) Line 587 C++ > xul.dll!PrepareAndDispatch(nsXPTCStubBase * self=0x1748dd48, unsigned int methodIndex=0x00000003, unsigned int * args=0x0039d0d0, unsigned int * stackBytesToPop=0x0039d0c0) Line 114 + 0x21 bytes C++ > xul.dll!SharedStub() Line 142 C++ > xul.dll!nsEventListenerManager::HandleEventSubType(nsListenerStruct * aListenerStruct=0x0c52a8c0, nsIDOMEventListener * aListener=0x1748dd48, nsIDOMEvent * aDOMEvent=0x17a1d150, nsPIDOMEventTarget * aCurrentTarget=0x0c6879a8, unsigned int aPhaseFlags=0x00000006, nsCxPusher * aPusher=0x0039d434) Line 1136 + 0x12 bytes C++ > xul.dll!nsEventListenerManager::HandleEventInternal(nsPresContext * aPresContext=0x0bca77a8, nsEvent * aEvent=0x17a1d1b0, nsIDOMEvent * * aDOMEvent=0x0039d424, nsPIDOMEventTarget * aCurrentTarget=0x0c6879a8, unsigned int aFlags=0x00000006, nsEventStatus * aEventStatus=0x0039d428, nsCxPusher * aPusher=0x0039d434) Line 1233 + 0x27 bytes C++ > xul.dll!nsEventListenerManager::HandleEvent(nsPresContext * aPresContext=0x0bca77a8, nsEvent * aEvent=0x17a1d1b0, nsIDOMEvent * * aDOMEvent=0x0039d424, nsPIDOMEventTarget * aCurrentTarget=0x0c6879a8, unsigned int aFlags=0x00000006, nsEventStatus * aEventStatus=0x0039d428, nsCxPusher * aPusher=0x0039d434) Line 147 C++ > xul.dll!nsEventTargetChainItem::HandleEvent(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=0x00000006, int aMayHaveNewListenerManagers=0x00000000, nsCxPusher * aPusher=0x0039d434) Line 216 C++ > xul.dll!nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=0x00000006, nsDispatchingCallback * aCallback=0x00000000, int aMayHaveNewListenerManagers=0x00000000, nsCxPusher * aPusher=0x0039d434) Line 346 C++ > xul.dll!nsEventDispatcher::Dispatch(nsISupports * aTarget=0x0c6879a8, nsPresContext * aPresContext=0x0bca77a8, nsEvent * aEvent=0x17a1d1b0, nsIDOMEvent * aDOMEvent=0x17a1d150, nsEventStatus * aEventStatus=0x0039d544, nsDispatchingCallback * aCallback=0x00000000, nsCOMArray<nsPIDOMEventTarget> * aTargets=0x00000000) Line 648 + 0x1e bytes C++ > xul.dll!nsEventDispatcher::DispatchDOMEvent(nsISupports * aTarget=0x0c6879a8, nsEvent * aEvent=0x00000000, nsIDOMEvent * aDOMEvent=0x17a1d150, nsPresContext * aPresContext=0x0bca77a8, nsEventStatus * aEventStatus=0x0039d544) Line 711 + 0x1d bytes C++ > xul.dll!nsDocument::DispatchEvent(nsIDOMEvent * aEvent=0x17a1d150, int * _retval=0x0039d590) Line 6305 + 0x22 bytes C++ > xul.dll!nsContentUtils::DispatchTrustedEvent(nsIDocument * aDoc=0x0c6879a8, nsISupports * aTarget=0x0c6879a8, const nsAString_internal & aEventName={...}, int aCanBubble=0x00000001, int aCancelable=0x00000001, int * aDefaultAction=0x00000000) Line 3034 + 0x3a bytes C++ > xul.dll!nsDocument::DispatchContentLoadedEvents() Line 4118 + 0x23 bytes C++ > xul.dll!nsRunnableMethodImpl<void (__thiscall nsDocument::*)(void),1>::Run() Line 342 C++ > xul.dll!nsThread::ProcessNextEvent(int mayWait=0x00000000, int * result=0x0039d6bc) Line 618 + 0x19 bytes C++ > xul.dll!NS_ProcessNextEvent_P(nsIThread * thread=0x0054d220, int mayWait=0x00000000) Line 245 + 0x16 bytes C++ > xul.dll!mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate * aDelegate=0x0059c5f0) Line 110 + 0xe bytes C++ > xul.dll!MessageLoop::RunInternal() Line 219 C++ > xul.dll!MessageLoop::RunHandler() Line 203 C++ > xul.dll!MessageLoop::Run() Line 177 C++ > xul.dll!nsBaseAppShell::Run() Line 191 C++ > xul.dll!nsAppShell::Run() Line 249 + 0x9 bytes C++ > xul.dll!nsAppStartup::Run() Line 222 + 0x1c bytes C++ > xul.dll!XRE_main(int argc=0x00000004, char * * argv=0x0054d780, const nsXREAppData * aAppData=0x0058f478) Line 3700 + 0x25 bytes C++ > firefox.exe!NS_internal_main(int argc=0x00000004, char * * argv=0x0054d780) Line 158 + 0x12 bytes C++ > firefox.exe!wmain(int argc=0x00000004, wchar_t * * argv=0x0054eba8) Line 106 + 0xd bytes C++ > firefox.exe!__tmainCRTStartup() Line 583 + 0x19 bytes C > firefox.exe!wmainCRTStartup() Line 403 C > kernel32.dll!75a733ca() > ntdll.dll!773f9ed2() > ntdll.dll!773f9ea5() plugin-container.exe > ntdll.dll!773e014d() > [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] > ntdll.dll!773e014d() > KernelBase.dll!76050962() > kernel32.dll!75a71a2c() > user32.dll!7666086a() >> nspr4.dll!_PR_MD_UNLOCK(_MDLock * lock=0x0062d134) Line 347 C > nspr4.dll!PR_Unlock(PRLock * lock=0x00543290) Line 347 + 0xc bytes C > 00000084() > xul.dll!mozilla::ipc::RPCChannel::WaitForNotify() Line 919 + 0x1a bytes C++ > xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x00547518, IPC::Message * reply=0x002cbb6c) Line 201 + 0xb bytes C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectChild::CallHasMethod(mozilla::plugins::PPluginIdentifierChild * aId=0x005392c8, bool * aHasMethod=0x002cbbe7) Line 167 + 0x16 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectChild::ScriptableHasMethod(NPObject * aObject=0x0062dc98, void * aName=0x005392c8) Line 122 C++ > xul.dll!mozilla::plugins::child::_hasmethod(_NPP * aNPP=0x00545f3c, NPObject * aNPObj=0x0062dc98, void * aMethodName=0x005392c8) Line 1416 + 0x12 bytes C++ > npsp3dviewer.dll!02704fb6() > QtGui4.dll!650564ac() > QtCore4.dll!670143d9() > QtCore4.dll!670e3df4() > npsp3dviewer.dll!0270711c() > npsp3dviewer.dll!0270775d() > QtCore4.dll!670e3df4() > npsp3dviewer.dll!02738d7e() > QtCore4.dll!671214ab() > QtGui4.dll!65040dcc() > sp3d_viewer_ax.dll!39d152bd() > qt-mt338.dll!03b20180() > qt-mt338.dll!03b20424() > sp3d_viewer_ax.dll!39ee87b2() > sp3d_viewer_ax.dll!39eb4978() > qt-mt338.dll!03b3e3f4() > qt-mt338.dll!03af69b8() > qt-mt338.dll!03af7888() > qt-mt338.dll!03ad26b7() > qt-mt338.dll!03aef8e3() > qt-mt338.dll!03b40b43() > qt-mt338.dll!03af30c3() > qt-mt338.dll!03b1621c() > user32.dll!766562fa() > user32.dll!76657038() > user32.dll!76656d3a() > user32.dll!76656ce9() > user32.dll!76656de8() > user32.dll!76656e44() > ntdll.dll!773d011a() > user32.dll!766572b9() > user32.dll!7667d4eb() > user32.dll!7665692a() > user32.dll!76657316() > user32.dll!76656ce9() > user32.dll!76656de8() > user32.dll!76658fa7() > ntdll.dll!773d011a() > user32.dll!76658e63() > sp3d_viewer_ax.dll!39d18b37() > npsp3dviewer.dll!0273d3c7() > npsp3dviewer.dll!0273d3d5() > QtGui4.dll!65052fee() > user32.dll!766562fa() > QtGui4.dll!65265b0d() > npsp3dviewer.dll!0273d5c3() > QtGui4.dll!65013932() > QtGui4.dll!65013946() > QtGui4.dll!65017589() > user32.dll!76658fa7() > ntdll.dll!773df8da() > user32.dll!76658fba() > ntdll.dll!773d011a() > user32.dll!766636ad() > QtGui4.dll!6506eb8e() > QtCore4.dll!670d3423() > QtCore4.dll!670d3c71() > QtGui4.dll!6506f6a4() > QtGui4.dll!65051ab7() > npsp3dviewer.dll!0273dc8c() > QtGui4.dll!65052fee() > user32.dll!766562fa() > QtGui4.dll!65265b0d() > QtCore4.dll!670d3d83() > QtGui4.dll!65013946() > QtGui4.dll!65017589() > user32.dll!76658fa7() > ntdll.dll!773df8da() > user32.dll!76658fba() > ntdll.dll!773d011a() > user32.dll!766636ad() > QtGui4.dll!6506eb8e() > QtCore4.dll!670d3423() > QtCore4.dll!670d3c71() > QtGui4.dll!6506f6a4() > atioglxx.dll!09291811() > npsp3dviewer.dll!026d15ca() > QtGui4.dll!65052fee() > QtGui4.dll!65265b0d() > QtCore4.dll!670d3d83() > QtGui4.dll!65013946() > QtGui4.dll!65017589() > msvcr71.dll!7c35423c() > msvcr71.dll!7c353ef4() > msvcr71.dll!7c34218f() > ntdll.dll!773f3cce() > ntdll.dll!773f0159() > ntdll.dll!773ff993() > ntdll.dll!773fb375() > ntdll.dll!773f9ea5()
Sorry, here is stack with debug symbols of Win7. firefox.exe > ntdll.dll!_NtWaitForMultipleObjects@20() + 0x15 bytes > ntdll.dll!_NtWaitForMultipleObjects@20() + 0x15 bytes > user32.dll!_CallHookWithSEH@16() + 0x33 bytes > kernel32.dll!_WaitForMultipleObjectsExImplementation@20() + 0x8e bytes > user32.dll!_RealMsgWaitForMultipleObjectsEx@20() + 0xe2 bytes > user32.dll!_MsgWaitForMultipleObjects@20() + 0x1f bytes >> xul.dll!mozilla::ipc::RPCChannel::WaitForNotify() Line 919 + 0x1a bytes C++ > xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x15892710, IPC::Message * reply=0x00306528) Line 201 + 0xb bytes C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectParent::CallHasProperty(mozilla::plugins::PPluginIdentifierParent * aId=0x0e4ea258, bool * aHasProperty=0x003065a3) Line 287 + 0x16 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectParent::ScriptableHasProperty(NPObject * aObject=0x0df8cbb8, void * aName=0x0d263680) Line 312 + 0x17 bytes C++ > xul.dll!NPObjWrapper_NewResolve(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d2ac150, jsid id={...}, unsigned int flags=0x00000001, JSObject * * objp=0x00306638) Line 1642 + 0x12 bytes C++ > mozjs.dll!CallResolveOp(JSContext * cx=0x0c0ad550, JSObject * start=0x0d2b14a0, JSObject * obj=0x0d2ac150, jsid id={...}, unsigned int flags=0x00000001, JSObject * * objp=0x003066e0, JSProperty * * propp=0x003066d4, bool * recursedp=0x0030668b) Line 4884 + 0x17 bytes C++ > mozjs.dll!LookupPropertyWithFlagsInline(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d2ac150, jsid id={...}, unsigned int flags=0x00000001, JSObject * * objp=0x003066e0, JSProperty * * propp=0x003066d4) Line 4943 + 0x25 bytes C++ > mozjs.dll!js_GetPropertyHelperWithShapeInline(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d2b14a0, JSObject * receiver=0x0d2b14a0, jsid id={...}, unsigned int getHow=0x00000000, js::Value * vp=0x0030680c, const js::Shape * * shapeOut=0x0030670c, JSObject * * holderOut=0x00306710) Line 5317 + 0x23 bytes C++ > mozjs.dll!js_GetPropertyHelperInline(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d2b14a0, JSObject * receiver=0x0d2b14a0, jsid id={...}, unsigned int getHow=0x00000000, js::Value * vp=0x0030680c) Line 5419 + 0x25 bytes C++ > mozjs.dll!js_GetProperty(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d2b14a0, JSObject * receiver=0x0d2b14a0, jsid id={...}, js::Value * vp=0x0030680c) Line 5432 + 0x1b bytes C++ > mozjs.dll!JSObject::getProperty(JSContext * cx=0x0c0ad550, JSObject * receiver=0x0d2b14a0, jsid id={...}, js::Value * vp=0x0030680c) Line 1149 + 0x2c bytes C++ > mozjs.dll!JSObject::getProperty(JSContext * cx=0x0c0ad550, jsid id={...}, js::Value * vp=0x0030680c) Line 1154 C++ > mozjs.dll!JS_GetPropertyById(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d2b14a0, jsid id={...}, jsval_layout * vp=0x0030680c) Line 3758 + 0x1d bytes C++ > xul.dll!GetProperty(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d2b14a0, void * id=0x0d263680, jsval_layout * rval=0x0030680c) Line 609 + 0x25 bytes C++ > xul.dll!nsJSObjWrapper::NP_HasMethod(NPObject * npobj=0x0e2184e0, void * id=0x0d263680) Line 642 + 0x18 bytes C++ > xul.dll!mozilla::plugins::parent::_hasmethod(_NPP * npp=0x0c050b1c, NPObject * npobj=0x0e2184e0, void * methodName=0x0d263680) Line 1857 + 0x12 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectParent::AnswerHasMethod(mozilla::plugins::PPluginIdentifierParent * aId=0x0e4ea258, bool * aHasMethod=0x00306ccb) Line 727 + 0x24 bytes C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectParent::OnCallReceived(const IPC::Message & __msg={...}, IPC::Message * & __reply=0x00000000) Line 726 + 0x1b bytes C++ > xul.dll!mozilla::plugins::PPluginModuleParent::OnCallReceived(const IPC::Message & __msg={...}, IPC::Message * & __reply=0x00000000) Line 936 + 0x15 bytes C++ > xul.dll!mozilla::ipc::RPCChannel::DispatchIncall(const IPC::Message & call={...}) Line 516 + 0x20 bytes C++ > xul.dll!mozilla::ipc::RPCChannel::Incall(const IPC::Message & call={...}, unsigned int stackDepth=0x00000001) Line 503 C++ > xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x15892710, IPC::Message * reply=0x00307080) Line 312 C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectParent::CallInvoke(mozilla::plugins::PPluginIdentifierParent * aId=0x0e4ea018, const InfallibleTArray<mozilla::plugins::Variant> & aArgs={...}, mozilla::plugins::Variant * aResult=0x00307104, bool * aSuccess=0x0030711b) Line 196 + 0x16 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectParent::ScriptableInvoke(NPObject * aObject=0x0df8cbb8, void * aName=0x1412d5a0, const _NPVariant * aArgs=0x00307178, unsigned int aArgCount=0x00000002, _NPVariant * aResult=0x00307220) Line 218 + 0x24 bytes C++ > xul.dll!CallNPMethodInternal(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d2ac150, unsigned int argc=0x00000002, jsval_layout * argv=0x08470308, jsval_layout * rval=0x084702f8, int ctorCall=0x00000000) Line 1483 + 0x24 bytes C++ > xul.dll!CallNPMethod(JSContext * cx=0x0c0ad550, unsigned int argc=0x00000002, jsval_layout * vp=0x084702f8) Line 1536 + 0x1e bytes C++ > mozjs.dll!js::CallJSNative(JSContext * cx=0x0c0ad550, int (JSContext *, unsigned int, js::Value *)* native=0x584c6ba0, const js::CallArgs & args={...}) Line 282 + 0x19 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 656 + 0x14 bytes C++ > mozjs.dll!js::Interpret(JSContext * cx=0x0c0ad550, js::StackFrame * entryFrame=0x084701f8, js::InterpMode interpMode=JSINTERP_NORMAL) Line 4553 + 0x12 bytes C++ > mozjs.dll!js::RunScript(JSContext * cx=0x0c0ad550, JSScript * script=0x0ea99358, js::StackFrame * fp=0x084701f8) Line 613 + 0xf bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 686 + 0x11 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, js::InvokeArgsGuard & args={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 169 + 0x1a bytes C++ > mozjs.dll!js_fun_call(JSContext * cx=0x0c0ad550, unsigned int argc=0x00000001, js::Value * vp=0x084701b0) Line 2148 + 0xf bytes C++ > mozjs.dll!js::CallJSNative(JSContext * cx=0x0c0ad550, int (JSContext *, unsigned int, js::Value *)* native=0x5c52d5c6, const js::CallArgs & args={...}) Line 282 + 0x19 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 656 + 0x14 bytes C++ > mozjs.dll!js::Interpret(JSContext * cx=0x0c0ad550, js::StackFrame * entryFrame=0x08470180, js::InterpMode interpMode=JSINTERP_NORMAL) Line 4553 + 0x12 bytes C++ > mozjs.dll!js::RunScript(JSContext * cx=0x0c0ad550, JSScript * script=0x0edaf010, js::StackFrame * fp=0x08470180) Line 613 + 0xf bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 686 + 0x11 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, js::InvokeArgsGuard & args={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 169 + 0x1a bytes C++ > mozjs.dll!js::ExternalInvoke(JSContext * cx=0x0c0ad550, const js::Value & thisv={...}, const js::Value & fval={...}, unsigned int argc=0x00000001, js::Value * argv=0x00309d64, js::Value * rval=0x00309d24) Line 805 + 0xf bytes C++ > mozjs.dll!JS_CallFunctionValue(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d01c698, jsval_layout fval={...}, unsigned int argc=0x00000001, jsval_layout * argv=0x00309d64, jsval_layout * rval=0x00309d24) Line 5088 + 0x45 bytes C++ > xul.dll!nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS * wrapper=0x08c16d40, unsigned short methodIndex=0x0003, const XPTMethodDescriptor * info=0x073c8e98, nsXPTCMiniVariant * nativeParams=0x00309e48) Line 1662 + 0x38 bytes C++ > xul.dll!nsXPCWrappedJS::CallMethod(unsigned short methodIndex=0x0003, const XPTMethodDescriptor * info=0x073c8e98, nsXPTCMiniVariant * params=0x00309e48) Line 587 C++ > xul.dll!PrepareAndDispatch(nsXPTCStubBase * self=0x158a7338, unsigned int methodIndex=0x00000003, unsigned int * args=0x00309f08, unsigned int * stackBytesToPop=0x00309ef8) Line 114 + 0x21 bytes C++ > xul.dll!SharedStub() Line 142 C++ > xul.dll!nsEventListenerManager::HandleEventSubType(nsListenerStruct * aListenerStruct=0x0e235100, nsIDOMEventListener * aListener=0x158a7338, nsIDOMEvent * aDOMEvent=0x0df39fe8, nsPIDOMEventTarget * aCurrentTarget=0x08ba3d90, unsigned int aPhaseFlags=0x00000006, nsCxPusher * aPusher=0x0030a26c) Line 1136 + 0x12 bytes C++ > xul.dll!nsEventListenerManager::HandleEventInternal(nsPresContext * aPresContext=0x15e14580, nsEvent * aEvent=0x0df39028, nsIDOMEvent * * aDOMEvent=0x0030a25c, nsPIDOMEventTarget * aCurrentTarget=0x08ba3d90, unsigned int aFlags=0x00000006, nsEventStatus * aEventStatus=0x0030a260, nsCxPusher * aPusher=0x0030a26c) Line 1233 + 0x27 bytes C++ > xul.dll!nsEventListenerManager::HandleEvent(nsPresContext * aPresContext=0x15e14580, nsEvent * aEvent=0x0df39028, nsIDOMEvent * * aDOMEvent=0x0030a25c, nsPIDOMEventTarget * aCurrentTarget=0x08ba3d90, unsigned int aFlags=0x00000006, nsEventStatus * aEventStatus=0x0030a260, nsCxPusher * aPusher=0x0030a26c) Line 147 C++ > xul.dll!nsEventTargetChainItem::HandleEvent(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=0x00000006, int aMayHaveNewListenerManagers=0x00000000, nsCxPusher * aPusher=0x0030a26c) Line 216 C++ > xul.dll!nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=0x00000006, nsDispatchingCallback * aCallback=0x00000000, int aMayHaveNewListenerManagers=0x00000000, nsCxPusher * aPusher=0x0030a26c) Line 346 C++ > xul.dll!nsEventDispatcher::Dispatch(nsISupports * aTarget=0x08ba3d90, nsPresContext * aPresContext=0x15e14580, nsEvent * aEvent=0x0df39028, nsIDOMEvent * aDOMEvent=0x0df39fe8, nsEventStatus * aEventStatus=0x0030a37c, nsDispatchingCallback * aCallback=0x00000000, nsCOMArray<nsPIDOMEventTarget> * aTargets=0x00000000) Line 648 + 0x1e bytes C++ > xul.dll!nsEventDispatcher::DispatchDOMEvent(nsISupports * aTarget=0x08ba3d90, nsEvent * aEvent=0x00000000, nsIDOMEvent * aDOMEvent=0x0df39fe8, nsPresContext * aPresContext=0x15e14580, nsEventStatus * aEventStatus=0x0030a37c) Line 711 + 0x1d bytes C++ > xul.dll!nsDocument::DispatchEvent(nsIDOMEvent * aEvent=0x0df39fe8, int * _retval=0x0030a3c8) Line 6305 + 0x22 bytes C++ > xul.dll!nsIDOMEventTarget_DispatchEvent(JSContext * cx=0x0c0ad550, unsigned int argc=0x00000001, jsval_layout * vp=0x08470150) Line 14036 + 0x16 bytes C++ > mozjs.dll!js::CallJSNative(JSContext * cx=0x0c0ad550, int (JSContext *, unsigned int, js::Value *)* native=0x582d3f00, const js::CallArgs & args={...}) Line 282 + 0x19 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 656 + 0x14 bytes C++ > mozjs.dll!js::Interpret(JSContext * cx=0x0c0ad550, js::StackFrame * entryFrame=0x08470118, js::InterpMode interpMode=JSINTERP_NORMAL) Line 4553 + 0x12 bytes C++ > mozjs.dll!js::RunScript(JSContext * cx=0x0c0ad550, JSScript * script=0x0c0ccd30, js::StackFrame * fp=0x08470118) Line 613 + 0xf bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 686 + 0x11 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, js::InvokeArgsGuard & args={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 169 + 0x1a bytes C++ > mozjs.dll!js_fun_apply(JSContext * cx=0x0c0ad550, unsigned int argc=0x00000002, js::Value * vp=0x084700c8) Line 2203 + 0xf bytes C++ > mozjs.dll!js::CallJSNative(JSContext * cx=0x0c0ad550, int (JSContext *, unsigned int, js::Value *)* native=0x5c529c9b, const js::CallArgs & args={...}) Line 282 + 0x19 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 656 + 0x14 bytes C++ > mozjs.dll!js::Interpret(JSContext * cx=0x0c0ad550, js::StackFrame * entryFrame=0x08470038, js::InterpMode interpMode=JSINTERP_NORMAL) Line 4553 + 0x12 bytes C++ > mozjs.dll!js::RunScript(JSContext * cx=0x0c0ad550, JSScript * script=0x0e902870, js::StackFrame * fp=0x08470038) Line 613 + 0xf bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 686 + 0x11 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x0c0ad550, js::InvokeArgsGuard & args={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 169 + 0x1a bytes C++ > mozjs.dll!js::ExternalInvoke(JSContext * cx=0x0c0ad550, const js::Value & thisv={...}, const js::Value & fval={...}, unsigned int argc=0x00000001, js::Value * argv=0x0030cee8, js::Value * rval=0x0030cea8) Line 805 + 0xf bytes C++ > mozjs.dll!JS_CallFunctionValue(JSContext * cx=0x0c0ad550, JSObject * obj=0x0d01c698, jsval_layout fval={...}, unsigned int argc=0x00000001, jsval_layout * argv=0x0030cee8, jsval_layout * rval=0x0030cea8) Line 5088 + 0x45 bytes C++ > xul.dll!nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS * wrapper=0x0ea5c658, unsigned short methodIndex=0x0003, const XPTMethodDescriptor * info=0x073c8e98, nsXPTCMiniVariant * nativeParams=0x0030cfcc) Line 1662 + 0x38 bytes C++ > xul.dll!nsXPCWrappedJS::CallMethod(unsigned short methodIndex=0x0003, const XPTMethodDescriptor * info=0x073c8e98, nsXPTCMiniVariant * params=0x0030cfcc) Line 587 C++ > xul.dll!PrepareAndDispatch(nsXPTCStubBase * self=0x0e387318, unsigned int methodIndex=0x00000003, unsigned int * args=0x0030d08c, unsigned int * stackBytesToPop=0x0030d07c) Line 114 + 0x21 bytes C++ > xul.dll!SharedStub() Line 142 C++ > xul.dll!nsEventListenerManager::HandleEventSubType(nsListenerStruct * aListenerStruct=0x0e2350e8, nsIDOMEventListener * aListener=0x0e387318, nsIDOMEvent * aDOMEvent=0x0df38368, nsPIDOMEventTarget * aCurrentTarget=0x08ba3d90, unsigned int aPhaseFlags=0x00000006, nsCxPusher * aPusher=0x0030d3f0) Line 1136 + 0x12 bytes C++ > xul.dll!nsEventListenerManager::HandleEventInternal(nsPresContext * aPresContext=0x15e14580, nsEvent * aEvent=0x0df3bae8, nsIDOMEvent * * aDOMEvent=0x0030d3e0, nsPIDOMEventTarget * aCurrentTarget=0x08ba3d90, unsigned int aFlags=0x00000006, nsEventStatus * aEventStatus=0x0030d3e4, nsCxPusher * aPusher=0x0030d3f0) Line 1233 + 0x27 bytes C++ > xul.dll!nsEventListenerManager::HandleEvent(nsPresContext * aPresContext=0x15e14580, nsEvent * aEvent=0x0df3bae8, nsIDOMEvent * * aDOMEvent=0x0030d3e0, nsPIDOMEventTarget * aCurrentTarget=0x08ba3d90, unsigned int aFlags=0x00000006, nsEventStatus * aEventStatus=0x0030d3e4, nsCxPusher * aPusher=0x0030d3f0) Line 147 C++ > xul.dll!nsEventTargetChainItem::HandleEvent(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=0x00000006, int aMayHaveNewListenerManagers=0x00000000, nsCxPusher * aPusher=0x0030d3f0) Line 216 C++ > xul.dll!nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=0x00000006, nsDispatchingCallback * aCallback=0x00000000, int aMayHaveNewListenerManagers=0x00000000, nsCxPusher * aPusher=0x0030d3f0) Line 346 C++ > xul.dll!nsEventDispatcher::Dispatch(nsISupports * aTarget=0x08ba3d90, nsPresContext * aPresContext=0x15e14580, nsEvent * aEvent=0x0df3bae8, nsIDOMEvent * aDOMEvent=0x0df38368, nsEventStatus * aEventStatus=0x0030d500, nsDispatchingCallback * aCallback=0x00000000, nsCOMArray<nsPIDOMEventTarget> * aTargets=0x00000000) Line 648 + 0x1e bytes C++ > xul.dll!nsEventDispatcher::DispatchDOMEvent(nsISupports * aTarget=0x08ba3d90, nsEvent * aEvent=0x00000000, nsIDOMEvent * aDOMEvent=0x0df38368, nsPresContext * aPresContext=0x15e14580, nsEventStatus * aEventStatus=0x0030d500) Line 711 + 0x1d bytes C++ > xul.dll!nsDocument::DispatchEvent(nsIDOMEvent * aEvent=0x0df38368, int * _retval=0x0030d54c) Line 6305 + 0x22 bytes C++ > xul.dll!nsContentUtils::DispatchTrustedEvent(nsIDocument * aDoc=0x08ba3d90, nsISupports * aTarget=0x08ba3d90, const nsAString_internal & aEventName={...}, int aCanBubble=0x00000001, int aCancelable=0x00000001, int * aDefaultAction=0x00000000) Line 3034 + 0x3a bytes C++ > xul.dll!nsDocument::DispatchContentLoadedEvents() Line 4118 + 0x23 bytes C++ > xul.dll!nsRunnableMethodImpl<void (__thiscall nsDocument::*)(void),1>::Run() Line 342 C++ > xul.dll!nsThread::ProcessNextEvent(int mayWait=0x00000000, int * result=0x0030d678) Line 618 + 0x19 bytes C++ > xul.dll!NS_ProcessNextEvent_P(nsIThread * thread=0x0064d220, int mayWait=0x00000000) Line 245 + 0x16 bytes C++ > xul.dll!mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate * aDelegate=0x0079c5f0) Line 110 + 0xe bytes C++ > xul.dll!MessageLoop::RunInternal() Line 219 C++ > xul.dll!MessageLoop::RunHandler() Line 203 C++ > xul.dll!MessageLoop::Run() Line 177 C++ > xul.dll!nsBaseAppShell::Run() Line 191 C++ > xul.dll!nsAppShell::Run() Line 249 + 0x9 bytes C++ > xul.dll!nsAppStartup::Run() Line 222 + 0x1c bytes C++ > xul.dll!XRE_main(int argc=0x00000004, char * * argv=0x0064d780, const nsXREAppData * aAppData=0x0078f478) Line 3700 + 0x25 bytes C++ > firefox.exe!NS_internal_main(int argc=0x00000004, char * * argv=0x0064d780) Line 158 + 0x12 bytes C++ > firefox.exe!wmain(int argc=0x00000004, wchar_t * * argv=0x0064eba8) Line 106 + 0xd bytes C++ > firefox.exe!__tmainCRTStartup() Line 583 + 0x19 bytes C > firefox.exe!wmainCRTStartup() Line 403 C > kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes > ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes > ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes plugin-container.exe > ntdll.dll!_NtWaitForMultipleObjects@20() + 0x15 bytes > ntdll.dll!_NtWaitForMultipleObjects@20() + 0x15 bytes > user32.dll!_CallHookWithSEH@16() + 0x33 bytes > kernel32.dll!_WaitForMultipleObjectsExImplementation@20() + 0x8e bytes > user32.dll!_RealMsgWaitForMultipleObjectsEx@20() + 0xe2 bytes > user32.dll!_MsgWaitForMultipleObjects@20() + 0x1f bytes >> xul.dll!mozilla::ipc::RPCChannel::WaitForNotify() Line 919 + 0x1a bytes C++ > xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x004b7498, IPC::Message * reply=0x0046bc0c) Line 201 + 0xb bytes C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectChild::CallHasMethod(mozilla::plugins::PPluginIdentifierChild * aId=0x004a92c8, bool * aHasMethod=0x0046bc87) Line 167 + 0x16 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectChild::ScriptableHasMethod(NPObject * aObject=0x0059e0d8, void * aName=0x004a92c8) Line 122 C++ > xul.dll!mozilla::plugins::child::_hasmethod(_NPP * aNPP=0x004b5f3c, NPObject * aNPObj=0x0059e0d8, void * aMethodName=0x004a92c8) Line 1416 + 0x12 bytes C++ > npsp3dviewer.dll!01224fb6() > [Frames below may be incorrect and/or missing, no symbols loaded for npsp3dviewer.dll] > QtGui4.dll!650564ac() > QtCore4.dll!670143d9() > QtCore4.dll!670e3df4() > npsp3dviewer.dll!0122711c() > npsp3dviewer.dll!0122775d() > QtCore4.dll!670e3df4() > npsp3dviewer.dll!01258d7e() > QtCore4.dll!671214ab() > QtGui4.dll!65040dcc() > sp3d_viewer_ax.dll!39d152bd() > qt-mt338.dll!03bc0180() > qt-mt338.dll!03bc0424() > sp3d_viewer_ax.dll!39ee87b2() > sp3d_viewer_ax.dll!39eb4978() > qt-mt338.dll!03bde3f4() > qt-mt338.dll!03b969b8() > qt-mt338.dll!03b97888() > qt-mt338.dll!03b726b7() > qt-mt338.dll!03b8f8e3() > qt-mt338.dll!03be0b43() > qt-mt338.dll!03b930c3() > qt-mt338.dll!03bb621c() > user32.dll!_InternalCallWinProc@20() + 0x23 bytes
And also I can see following debug message in console: > For application/spaceyes found plugin npsp3dviewer.dll > ###!!! ASSERTION: windowHook out of sync with reality: '(!!windowHook) == SyncChannel::IsPumpingMessages()', file m:/mozilla-s/src/ipc/glue/WindowsMessageLoop.cpp, line 864 > ###!!! ASSERTION: windowHook out of sync with reality: '(!!windowHook) == SyncChannel::IsPumpingMessages()', file m:/mozilla-s/src/ipc/glue/WindowsMessageLoop.cpp, line 864 > ###!!! ASSERTION: windowHook out of sync with reality: '(!!windowHook) == SyncChannel::IsPumpingMessages()', file m:/mozilla-s/src/ipc/glue/WindowsMessageLoop.cpp, line 864 > ###!!! ASSERTION: windowHook out of sync with reality: '(!!windowHook) == SyncChannel::IsPumpingMessages()', file m:/mozilla-s/src/ipc/glue/WindowsMessageLoop.cpp, line 864 > ###!!! ASSERTION: windowHook out of sync with reality: '(!!windowHook) == SyncChannel::IsPumpingMessages()', file m:/mozilla-s/src/ipc/glue/WindowsMessageLoop.cpp, line 864 > ###!!! ASSERTION: windowHook out of sync with reality: '(!!windowHook) == SyncChannel::IsPumpingMessages()', file m:/mozilla-s/src/ipc/glue/WindowsMessageLoop.cpp, line 864 > ###!!! ASSERTION: windowHook out of sync with reality: '(!!windowHook) == SyncChannel::IsPumpingMessages()', file m:/mozilla-s/src/ipc/glue/WindowsMessageLoop.cpp, line 864
ok, we'll let jimm look at this when he gets back. It looks like the plugin is messing with window hooks.
Assignee: masayuki → jmathies
Comment on attachment 536299 [details] [diff] [review] Fix of the previously submitted patch We want all plugins to run out of process. We've only made one exception to this in the case of java, which runs it's own out of process security model. I'm sure between mozilla and the plugin authors we can find a fix for this that doesn't involve opting out.
Attachment #536299 - Flags: review?(benjamin) → review-
Masayuki, there seems to be a bug in the scroll handling. According to the comments, wheel scroll messages need to be forwarded to plugins here: http://mxr.mozilla.org/mozilla-central/source/widget/src/windows/nsWindow.cpp#7698 However I've commented this SendMessage line out and zoom still works in this plugin. I haven't seen any lockups after playing with it for a while. From what I can garner from the comments, zoom shouldn't be working without that send message. But apparently the message is still making it to the plugin.
(In reply to comment #24) > Masayuki, there seems to be a bug in the scroll handling. According to the > comments, wheel scroll messages need to be forwarded to plugins here: > > http://mxr.mozilla.org/mozilla-central/source/widget/src/windows/nsWindow. > cpp#7698 No, it doesn't send the scroll messages to plugins. It redirects the message to our window under the cursor. Sending message to plugin is here: http://mxr.mozilla.org/mozilla-central/source/widget/src/windows/nsWindow.cpp#7684 Anyway, my patch should fix the scroll handling bug. > However I've commented this SendMessage line out and zoom still works in > this plugin. If you set focus to the plugin, most mouse drivers send the messages to the focused plugin window directly. Then, the SendMessage() is never called (i.e., we don't need to redirect the messages at that time). > I haven't seen any lockups after playing with it for a while. Did you enable OOPP for the plugin? The current version changes our pref and disables OOPP for the plugin. 1. Open about:config and turn dom.ipc.plugins.enabled.npsp3dviewer.dll true. 2. Open the test page. Then, you can test it. Don't open the test page before you change the pref. You need to change it every time. > From what I can garner from the comments, zoom shouldn't be working without > that send message. But apparently the message is still making it to the > plugin. If you want to test about calling SendMessage() case, you should set focus to our searchbar or locationbar. And move cursor over the plugin and turn the wheel. However, some mouse drivers send them the window under the cursor directly. With such mouse, you cannot test the case except you uninstall the driver.
(In reply to comment #25) > (In reply to comment #24) > > Masayuki, there seems to be a bug in the scroll handling. According to the > > comments, wheel scroll messages need to be forwarded to plugins here: > > > > http://mxr.mozilla.org/mozilla-central/source/widget/src/windows/nsWindow. > > cpp#7698 > > No, it doesn't send the scroll messages to plugins. It redirects the message > to our window under the cursor. > > Sending message to plugin is here: > http://mxr.mozilla.org/mozilla-central/source/widget/src/windows/nsWindow. > cpp#7684 > > Anyway, my patch should fix the scroll handling bug. But it also caused a lock up (and was a major change) so I was looking for a simpler solutions. > > > However I've commented this SendMessage line out and zoom still works in > > this plugin. > > If you set focus to the plugin, most mouse drivers send the messages to the > focused plugin window directly. Then, the SendMessage() is never called > (i.e., we don't need to redirect the messages at that time). The SendMessage call was getting called and was locking up before I commented it out. I was testing without your patch. > > > I haven't seen any lockups after playing with it for a while. > > Did you enable OOPP for the plugin? The current version changes our pref and > disables OOPP for the plugin. Yes, I hardcoded oopp on for everything in the src. Their plugin is currently flipping the pref every time the plugin loads. (Which may make it a candidate for blocklisting, since they don't communicate this to the user in any way. But if we can fix this on our end, we can blocklist the current rev. only.) > > From what I can garner from the comments, zoom shouldn't be working without > > that send message. But apparently the message is still making it to the > > plugin. > > If you want to test about calling SendMessage() case, you should set focus > to our searchbar or locationbar. And move cursor over the plugin and turn > the wheel. I will test again but I was clicking on their controls and then scrolling. No lockups with the SendMessage call commented out.
(In reply to comment #26) > Yes, I hardcoded oopp on for everything in the src. Their plugin is > currently flipping the pref every time the plugin loads. The setup of the plugin add the preference to the user.js file. The preference is not changed "every time the plugin loads". > (Which may make it a candidate for blocklisting, since they don't communicate this to the user > in any way. But if we can fix this on our end, we can blocklist the current > rev. only.)
(In reply to comment #27) > (In reply to comment #26) > > > Yes, I hardcoded oopp on for everything in the src. Their plugin is > > currently flipping the pref every time the plugin loads. > > The setup of the plugin add the preference to the user.js file. > The preference is not changed "every time the plugin loads". > It does in the rev of the plugin I downloaded yesterday, they must have updated it.
(In reply to comment #26) > (In reply to comment #25) > > (In reply to comment #24) > > > Masayuki, there seems to be a bug in the scroll handling. According to the > > > comments, wheel scroll messages need to be forwarded to plugins here: > > > > > > http://mxr.mozilla.org/mozilla-central/source/widget/src/windows/nsWindow. > > > cpp#7698 > > > > No, it doesn't send the scroll messages to plugins. It redirects the message > > to our window under the cursor. > > > > Sending message to plugin is here: > > http://mxr.mozilla.org/mozilla-central/source/widget/src/windows/nsWindow. > > cpp#7684 > > > > Anyway, my patch should fix the scroll handling bug. > > But it also caused a lock up (and was a major change) so I was looking for a > simpler solutions. Um, it's odd. But my patch can use PostMessage() instead of calling another nsWindow::ProcessMessage(). > > > However I've commented this SendMessage line out and zoom still works in > > > this plugin. > > > > If you set focus to the plugin, most mouse drivers send the messages to the > > focused plugin window directly. Then, the SendMessage() is never called > > (i.e., we don't need to redirect the messages at that time). > > The SendMessage call was getting called and was locking up before I > commented it out. I was testing without your patch. If plugin sent the message to toplevel window, it could cause infinite loop if you had set focus to the plugin and your mouse driver sent the message to focused plugin window directly.
jimm: anyway, the patch gets rid of SendMessage() from mouse wheel handling. would you review it?
Comment on attachment 537964 [details] [diff] [review] Get rid of SendMessage() from mouse wheel event handling Sorry it's taken so long, this code has grown a lot in the last couple years and reviewing it has become tedious. masayuki - I filed bug 672175 regarding looking into ways of better encapsulating our scroll code outside of nsWindow.
Attachment #537964 - Flags: review?(jmathies) → review+
landed on mozilla-central. but I think this bug has NOT been fixed yet. http://hg.mozilla.org/mozilla-central/rev/cb495bdd4aea
I can still reproduce similar hang up. 1. Load the demo page 2. Click "Pamiers" 3. After completes the loading, click "Constanta" I can see very many assertions: > ###!!! ASSERTION: windowHook out of sync with reality: '(!!windowHook) == SyncChannel::IsPumpingMessages()', file m:/mozilla-f/src/ipc/glue/WindowsMessageLoop.cpp, line 871 Our stacktrace: > ntdll.dll!_NtWaitForMultipleObjects@20() + 0x15 bytes > ntdll.dll!_NtWaitForMultipleObjects@20() + 0x15 bytes > user32.dll!_CallHookWithSEH@16() + 0x33 bytes > kernel32.dll!75631a2c() > [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] > user32.dll!_RealMsgWaitForMultipleObjectsEx@20() + 0xe2 bytes > user32.dll!_MsgWaitForMultipleObjects@20() + 0x1f bytes >> xul.dll!mozilla::ipc::RPCChannel::WaitForNotify() Line 926 + 0x1a bytes C++ > xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x17574d80, IPC::Message * reply=0x003c97bc) Line 201 + 0xb bytes C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectParent::CallHasProperty(mozilla::plugins::PPluginIdentifierParent * aId=0x19168478, bool * aHasProperty=0x003c9837) Line 287 + 0x16 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectParent::ScriptableHasProperty(NPObject * aObject=0x1476a648, void * aName=0x10799430) Line 290 + 0x1c bytes C++ > xul.dll!NPObjWrapper_NewResolve(JSContext * cx=0x09df2b60, JSObject * obj=0x12578ec0, jsid id={...}, unsigned int flags=1, JSObject * * objp=0x003c98cc) Line 1649 + 0x12 bytes C++ > mozjs.dll!CallResolveOp(JSContext * cx=0x09df2b60, JSObject * start=0x12460900, JSObject * obj=0x12578ec0, jsid id={...}, unsigned int flags=1, JSObject * * objp=0x003c9974, JSProperty * * propp=0x003c9968, bool * recursedp=0x003c991f) Line 4784 + 0x17 bytes C++ > mozjs.dll!LookupPropertyWithFlagsInline(JSContext * cx=0x09df2b60, JSObject * obj=0x12578ec0, jsid id={...}, unsigned int flags=1, JSObject * * objp=0x003c9974, JSProperty * * propp=0x003c9968) Line 4837 + 0x25 bytes C++ > mozjs.dll!js_GetPropertyHelperInline(JSContext * cx=0x09df2b60, JSObject * obj=0x12460900, JSObject * receiver=0x12460900, jsid id={...}, unsigned int getHow=0, js::Value * vp=0x003c9a70) Line 5206 + 0x23 bytes C++ > mozjs.dll!js_GetProperty(JSContext * cx=0x09df2b60, JSObject * obj=0x12460900, JSObject * receiver=0x12460900, jsid id={...}, js::Value * vp=0x003c9a70) Line 5300 + 0x1b bytes C++ > mozjs.dll!JSObject::getProperty(JSContext * cx=0x09df2b60, JSObject * receiver=0x12460900, jsid id={...}, js::Value * vp=0x003c9a70) Line 1183 + 0x2c bytes C++ > mozjs.dll!JSObject::getProperty(JSContext * cx=0x09df2b60, jsid id={...}, js::Value * vp=0x003c9a70) Line 1188 C++ > mozjs.dll!JS_GetPropertyById(JSContext * cx=0x09df2b60, JSObject * obj=0x12460900, jsid id={...}, jsval_layout * vp=0x003c9a70) Line 3762 + 0x1d bytes C++ > xul.dll!GetProperty(JSContext * cx=0x09df2b60, JSObject * obj=0x12460900, void * id=0x10799430, jsval_layout * rval=0x003c9a70) Line 616 + 0x25 bytes C++ > xul.dll!nsJSObjWrapper::NP_HasMethod(NPObject * npobj=0x14772288, void * id=0x10799430) Line 649 + 0x18 bytes C++ > xul.dll!mozilla::plugins::parent::_hasmethod(_NPP * npp=0x17574e8c, NPObject * npobj=0x14772288, void * methodName=0x10799430) Line 1857 + 0x12 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectParent::AnswerHasMethod(mozilla::plugins::PPluginIdentifierParent * aId=0x19168478, bool * aHasMethod=0x003c9f2f) Line 705 + 0x24 bytes C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectParent::OnCallReceived(const IPC::Message & __msg={...}, IPC::Message * & __reply=0x00000000) Line 726 + 0x1b bytes C++ > xul.dll!mozilla::plugins::PPluginModuleParent::OnCallReceived(const IPC::Message & __msg={...}, IPC::Message * & __reply=0x00000000) Line 1013 + 0x15 bytes C++ > xul.dll!mozilla::ipc::RPCChannel::DispatchIncall(const IPC::Message & call={...}) Line 516 + 0x20 bytes C++ > xul.dll!mozilla::ipc::RPCChannel::Incall(const IPC::Message & call={...}, unsigned int stackDepth=1) Line 503 C++ > xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x17574d80, IPC::Message * reply=0x003ca2e4) Line 312 C++ > xul.dll!mozilla::plugins::PPluginScriptableObjectParent::CallInvoke(mozilla::plugins::PPluginIdentifierParent * aId=0x19179d18, const InfallibleTArray<mozilla::plugins::Variant> & aArgs={...}, mozilla::plugins::Variant * aResult=0x003ca368, bool * aSuccess=0x003ca37f) Line 196 + 0x16 bytes C++ > xul.dll!mozilla::plugins::PluginScriptableObjectParent::ScriptableInvoke(NPObject * aObject=0x1476a648, void * aName=0x10799380, const _NPVariant * aArgs=0x003ca3dc, unsigned int aArgCount=1, _NPVariant * aResult=0x003ca484) Line 196 + 0x29 bytes C++ > xul.dll!CallNPMethodInternal(JSContext * cx=0x09df2b60, JSObject * obj=0x12578ec0, unsigned int argc=1, jsval_layout * argv=0x049200f0, jsval_layout * rval=0x049200e0, int ctorCall=0) Line 1490 + 0x24 bytes C++ > xul.dll!CallNPMethod(JSContext * cx=0x09df2b60, unsigned int argc=1, jsval_layout * vp=0x049200e0) Line 1543 + 0x1e bytes C++ > mozjs.dll!js::CallJSNative(JSContext * cx=0x09df2b60, int (JSContext *, unsigned int, js::Value *)* native=0x557c7a30, const js::CallArgs & args={...}) Line 281 + 0x19 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x09df2b60, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 656 + 0x14 bytes C++ > mozjs.dll!js::Interpret(JSContext * cx=0x09df2b60, js::StackFrame * entryFrame=0x04920068, js::InterpMode interpMode=JSINTERP_NORMAL) Line 4008 + 0x12 bytes C++ > mozjs.dll!js::RunScript(JSContext * cx=0x09df2b60, JSScript * script=0x113b0a28, js::StackFrame * fp=0x04920068) Line 613 + 0xf bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x09df2b60, const js::CallArgs & argsRef={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 686 + 0x11 bytes C++ > mozjs.dll!js::Invoke(JSContext * cx=0x09df2b60, js::InvokeArgsGuard & args={...}, js::MaybeConstruct construct=NO_CONSTRUCT) Line 169 + 0x1a bytes C++ > mozjs.dll!js::ExternalInvoke(JSContext * cx=0x09df2b60, const js::Value & thisv={...}, const js::Value & fval={...}, unsigned int argc=1, js::Value * argv=0x1150e5c8, js::Value * rval=0x003cb828) Line 805 + 0xf bytes C++ > mozjs.dll!JS_CallFunctionValue(JSContext * cx=0x09df2b60, JSObject * obj=0x12460f90, jsval_layout fval={...}, unsigned int argc=1, jsval_layout * argv=0x1150e5c8, jsval_layout * rval=0x003cb828) Line 5082 + 0x45 bytes C++ > xul.dll!nsJSContext::CallEventHandler(nsISupports * aTarget=0x191bffb0, void * aScope=0x12578088, void * aHandler=0x12460fc8, nsIArray * aargv=0x135f3320, nsIVariant * * arv=0x003cba64) Line 1912 + 0x2e bytes C++ > xul.dll!nsJSEventListener::HandleEvent(nsIDOMEvent * aEvent=0x13144158) Line 224 + 0x64 bytes C++ > xul.dll!nsEventListenerManager::HandleEventSubType(nsListenerStruct * aListenerStruct=0x191c71e0, nsIDOMEventListener * aListener=0x1916d518, nsIDOMEvent * aDOMEvent=0x13144158, nsIDOMEventTarget * aCurrentTarget=0x191bffb0, unsigned int aPhaseFlags=6, nsCxPusher * aPusher=0x003cbe00) Line 1075 + 0x12 bytes C++ > xul.dll!nsEventListenerManager::HandleEventInternal(nsPresContext * aPresContext=0x146dca50, nsEvent * aEvent=0x003cc00c, nsIDOMEvent * * aDOMEvent=0x003cbdf0, nsIDOMEventTarget * aCurrentTarget=0x191bffb0, unsigned int aFlags=6, nsEventStatus * aEventStatus=0x003cbdf4, nsCxPusher * aPusher=0x003cbe00) Line 1174 + 0x27 bytes C++ > xul.dll!nsEventListenerManager::HandleEvent(nsPresContext * aPresContext=0x146dca50, nsEvent * aEvent=0x003cc00c, nsIDOMEvent * * aDOMEvent=0x003cbdf0, nsIDOMEventTarget * aCurrentTarget=0x191bffb0, unsigned int aFlags=6, nsEventStatus * aEventStatus=0x003cbdf4, nsCxPusher * aPusher=0x003cbe00) Line 153 C++ > xul.dll!nsEventTargetChainItem::HandleEvent(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=6, int aMayHaveNewListenerManagers=0, nsCxPusher * aPusher=0x003cbe00) Line 216 C++ > xul.dll!nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor & aVisitor={...}, unsigned int aFlags=6, nsDispatchingCallback * aCallback=0x003cbf04, int aMayHaveNewListenerManagers=0, nsCxPusher * aPusher=0x003cbe00) Line 346 C++ > xul.dll!nsEventDispatcher::Dispatch(nsISupports * aTarget=0x191bffb0, nsPresContext * aPresContext=0x146dca50, nsEvent * aEvent=0x003cc00c, nsIDOMEvent * aDOMEvent=0x00000000, nsEventStatus * aEventStatus=0x003cc500, nsDispatchingCallback * aCallback=0x003cbf04, nsCOMArray<nsIDOMEventTarget> * aTargets=0x00000000) Line 672 + 0x21 bytes C++ > xul.dll!PresShell::HandleEventInternal(nsEvent * aEvent=0x003cc00c, nsIView * aView=0x00000000, nsEventStatus * aStatus=0x003cc500) Line 7081 + 0x2b bytes C++ > xul.dll!PresShell::HandleEventWithTarget(nsEvent * aEvent=0x003cc00c, nsIFrame * aFrame=0x191aa650, nsIContent * aContent=0x191bffb0, nsEventStatus * aStatus=0x003cc500) Line 6929 + 0x12 bytes C++ > xul.dll!nsEventStateManager::CheckForAndDispatchClick(nsPresContext * aPresContext=0x146dca50, nsMouseEvent * aEvent=0x003cc6a8, nsEventStatus * aStatus=0x003cc500) Line 4259 + 0x44 bytes C++ > xul.dll!nsEventStateManager::PostHandleEvent(nsPresContext * aPresContext=0x146dca50, nsEvent * aEvent=0x003cc6a8, nsIFrame * aTargetFrame=0x191aa650, nsEventStatus * aStatus=0x003cc500, nsIView * aView=0x191c1b98) Line 3201 + 0x1c bytes C++ > xul.dll!PresShell::HandleEventInternal(nsEvent * aEvent=0x003cc6a8, nsIView * aView=0x191c1b98, nsEventStatus * aStatus=0x003cc500) Line 7104 + 0x30 bytes C++ > xul.dll!PresShell::HandlePositionedEvent(nsIView * aView=0x191c1b98, nsIFrame * aTargetFrame=0x191aa650, nsGUIEvent * aEvent=0x003cc6a8, nsEventStatus * aEventStatus=0x003cc500) Line 6914 + 0x14 bytes C++ > xul.dll!PresShell::HandleEvent(nsIView * aView=0x0589aa08, nsGUIEvent * aEvent=0x003cc6a8, int aDontRetargetEvents=0, nsEventStatus * aEventStatus=0x003cc500) Line 6746 + 0x1b bytes C++ > xul.dll!nsViewManager::HandleEvent(nsView * aView=0x0589aa08, nsGUIEvent * aEvent=0x003cc6a8) Line 1032 C++ > xul.dll!nsViewManager::DispatchEvent(nsGUIEvent * aEvent=0x003cc6a8, nsIView * aView=0x0589aa08, nsEventStatus * aStatus=0x003cc604) Line 1007 + 0x13 bytes C++ > xul.dll!AttachedHandleEvent(nsGUIEvent * aEvent=0x003cc6a8) Line 192 C++ > xul.dll!nsWindow::DispatchEvent(nsGUIEvent * event=0x003cc6a8, nsEventStatus & aStatus=nsEventStatus_eIgnore) Line 3555 + 0xc bytes C++ > xul.dll!nsWindow::DispatchWindowEvent(nsGUIEvent * event=0x003cc6a8) Line 3582 C++ > xul.dll!nsWindow::DispatchMouseEvent(unsigned int aEventType=301, unsigned int wParam=0, long lParam=8520040, int aIsContextMenuKey=0, short aButton=0, unsigned short aInputSource=1) Line 4005 + 0x1d bytes C++ > xul.dll!nsWindow::ProcessMessage(unsigned int msg=514, unsigned int & wParam=0, long & lParam=8520040, long * aRetValue=0x003ccdbc) Line 4939 + 0x34 bytes C++ > xul.dll!nsWindow::WindowProcInternal(HWND__ * hWnd=0x000a19a4, unsigned int msg=514, unsigned int wParam=0, long lParam=8520040) Line 4407 + 0x20 bytes C++ > xul.dll!CallWindowProcCrashProtected(long (HWND__ *, unsigned int, unsigned int, long)* wndProc=0x55901e70, HWND__ * hWnd=0x000a19a4, unsigned int msg=514, unsigned int wParam=0, long lParam=8520040) Line 65 + 0x13 bytes C++ > xul.dll!nsWindow::WindowProc(HWND__ * hWnd=0x000a19a4, unsigned int msg=514, unsigned int wParam=0, long lParam=8520040) Line 4349 + 0x1a bytes C++ > user32.dll!_InternalCallWinProc@20() + 0x23 bytes > user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes > user32.dll!_DispatchMessageWorker@8() + 0xed bytes > user32.dll!_DispatchMessageW@4() + 0xf bytes > xul.dll!nsAppShell::ProcessNextNativeEvent(int mayWait=1) Line 339 C++ > xul.dll!nsBaseAppShell::DoProcessNextNativeEvent(int mayWait=1) Line 171 + 0x11 bytes C++ > xul.dll!nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal * thr=0x0060a018, int mayWait=1, unsigned int recursionDepth=0) Line 324 + 0xf bytes C++ > xul.dll!nsThread::ProcessNextEvent(int mayWait=1, int * result=0x003cd048) Line 598 C++ > xul.dll!NS_ProcessNextEvent_P(nsIThread * thread=0x0060a018, int mayWait=1) Line 245 + 0x16 bytes C++ > xul.dll!mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate * aDelegate=0x00608ad0) Line 134 + 0xe bytes C++ > xul.dll!MessageLoop::RunInternal() Line 222 C++ > xul.dll!MessageLoop::RunHandler() Line 206 C++ > xul.dll!MessageLoop::Run() Line 180 C++ > xul.dll!nsBaseAppShell::Run() Line 191 C++ > xul.dll!nsAppShell::Run() Line 256 + 0x9 bytes C++ > xul.dll!nsAppStartup::Run() Line 224 + 0x1c bytes C++ > xul.dll!XRE_main(int argc=4, char * * argv=0x0046f018, const nsXREAppData * aAppData=0x005fa318) Line 3577 + 0x25 bytes C++ > firefox.exe!do_main(const char * exePath=0x003cf9b8, int argc=4, char * * argv=0x0046f018) Line 198 + 0x12 bytes C++ > firefox.exe!NS_internal_main(int argc=4, char * * argv=0x0046f018) Line 281 + 0x14 bytes C++ > firefox.exe!wmain(int argc=4, wchar_t * * argv=0x004698e0) Line 107 + 0xd bytes C++ > firefox.exe!__tmainCRTStartup() Line 583 + 0x19 bytes C > firefox.exe!wmainCRTStartup() Line 403 C > kernel32.dll!7563339a() > ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes > ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes Looks like dispatching click event from ESM causes connecting plugin.
That assert indicates an out of order rpc call was made, most likely from the plugin to the child. From your stack it looks like: browser: Invoke script -> child child: HasMethod -> browser child: HasProperty -> browser (assert)
Yeah, we'd need the stack from the plugin in order to figure out how it's reentering.
Depends on: 676361
> ntdll.dll!_NtWaitForMultipleObjects@20() + 0x15 bytes > ntdll.dll!_NtWaitForMultipleObjects@20() + 0x15 bytes > kernel32.dll!75631a2c() > [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] > xul.dll!std::_Ranit<base::MessagePumpWin::Observer *,int,base::MessagePumpWin::Observer * const *,base::MessagePumpWin::Observer * const &>::~_Ranit<base::MessagePumpWin::Observer *,int,base::MessagePumpWin::Observer * const *,base::MessagePumpWin::Observer * const &>() + 0xf bytes C++ > xul.dll!std::_Vector_const_iterator<base::MessagePumpWin::Observer *,std::allocator<base::MessagePumpWin::Observer *> >::~_Vector_const_iterator<base::MessagePumpWin::Observer *,std::allocator<base::MessagePumpWin::Observer *> >() + 0xf bytes C++ > 0034ec58() > user32.dll!_RealMsgWaitForMultipleObjectsEx@20() + 0xe2 bytes >> xul.dll!base::MessagePumpForUI::WaitForWork() Line 267 + 0x15 bytes C++ > xul.dll!base::MessagePumpForUI::DoRunLoop() Line 239 + 0x8 bytes C++ > xul.dll!base::MessagePumpWin::RunWithDispatcher(base::MessagePump::Delegate * delegate=0x0034edd4, base::MessagePumpWin::Dispatcher * dispatcher=0x00000000) Line 55 C++ > xul.dll!base::MessagePumpWin::Run(base::MessagePump::Delegate * delegate=0x0034edd4) Line 78 + 0x15 bytes C++ > xul.dll!MessageLoop::RunInternal() Line 222 C++ > xul.dll!MessageLoop::RunHandler() Line 199 C++ > xul.dll!MessageLoop::Run() Line 180 C++ > xul.dll!XRE_InitChildProcess(int aArgc=3, char * * aArgv=0x0109d050, GeckoProcessType aProcess=GeckoProcessType_Plugin) Line 516 C++ > plugin-container.exe!NS_internal_main(int argc=6, char * * argv=0x0109d050) Line 81 + 0x12 bytes C++ > plugin-container.exe!wmain(int argc=7, wchar_t * * argv=0x0122f6b8) Line 107 + 0xd bytes C++ > plugin-container.exe!__tmainCRTStartup() Line 583 + 0x19 bytes C > plugin-container.exe!wmainCRTStartup() Line 403 C > kernel32.dll!7563339a() > ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes > ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes plugin-container's stack
Hello all, I am one of the authors of the concerned plugin. Most of our customers are very disappointed that the plugin doesn't work with new releases of Firefox. We really need to find a solution to make it work in the plugin-container as it seems that it is the definitive way to execute plugins now. Is there any information I can provide you in order to find why the plugin hangs ? A debug version version of the plugin - with pdb - could probably be useful ? Please let me know how I can help. Regards, Frédéric.
Assignee: jmathies → nobody
Status: NEW → RESOLVED
Closed: 12 years ago
Resolution: --- → INCOMPLETE
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: