I have developed npruntime based plugin for firefox/chrome and its working fine with ff3.6/chrome 10,but when i load any other plugin in firefox 4.0 or later after loading my plugin,then firefox hangs i.e if I open gmail after my plugin has been loaded,t开发者_如何转开发hen firefox stops responding and i have verified that it has got something to do with plugin container. can anyone suggest where exactly I am going wrong ?? any pointers would be appreciated. Thanks in advance
this is call stack for ff6
ntdll.dll!_ZwWaitForSingleObject@12()
ntdll.dll!_ZwWaitForSingleObject@12() kernel32.dll!_WaitForSingleObjectExImplementation@12() kernel32.dll!_WaitForSingleObject@8() nspr4.dll!_PR_MD_WAIT_CV(_MDCVar * cv, _MDLock * lock, unsigned int timeout) nspr4.dll!_PR_WaitCondVar(PRThread * thread, PRCondVar * cvar, PRLock * lock, unsigned int timeout) nspr4.dll!PR_WaitCondVar(PRCondVar * cvar, unsigned int timeout) xul.dll!mozilla::CondVar::Wait(unsigned int interval) xul.dll!mozilla::ipc::GeckoChildProcessHost::SyncLaunch(std::vector,std::allocator >,std::allocator,std::allocator > > > aExtraOpts, int aTimeoutMs, base::ProcessArchitecture arch) xul.dll!mozilla::plugins::PluginProcessParent::Launch(int timeoutMs) xul.dll!mozilla::plugins::PluginModuleParent::LoadModule(const char * aFilePath) xul.dll!GetNewPluginLibrary(nsPluginTag * aPluginTag) xul.dll!nsNPAPIPlugin::CreatePlugin(nsPluginTag * aPluginTag, nsNPAPIPlugin * * aResult) xul.dll!CreateNPAPIPlugin(nsPluginTag * aPluginTag, nsNPAPIPlugin * * aOutNPAPIPlugin) xul.dll!nsPluginHost::EnsurePluginLoaded(nsPluginTag * plugin) xul.dll!nsPluginHost::GetPlugin(const char * aMimeType, nsNPAPIPlugin * * aPlugin) xul.dll!nsPluginHost::TrySetUpPluginInstance(const char * aMimeType, nsIURI * aURL, nsIPluginInstanceOwner * aOwner) xul.dll!nsPluginHost::SetUpPluginInstance(const char * aMimeType, nsIURI * aURL, nsIPluginInstanceOwner * aOwner) xul.dll!nsPluginHost::InstantiateEmbeddedPlugin(const char * aMimeType, nsIURI * aURL, nsIPluginInstanceOwner * aOwner, int aAllowOpeningStreams) ...
I would try turning off IPC mode first; your stack seems to indicate that it is hanging while waiting for the plugin process to start up, but I don't know why it would hang there since it should have a timeout. If turning off IPC mode helps, then the problem is likely something interfering with the IPC between the browser and the plugin host processes.
Next I'd try adding breakpoints to all of the entrypoints in the DLL. You can connect a debugger by putting sleep(10000) or something similar in DllMain; when the plugin starts loading it should hit that first before doing anythign potentially damaging and you can connect to the plugin host process with a debugger and then check to see what entrypoints you make it to, etc. Stepping through long enough should eventually yield some clues about what might be happening.
You could also try porting it to something like FireBreath, which is known to be working and removes most chances that you'd have to make an obscure mistake like this likely is that some browsers don't like.
I developed npruntime for every browser. It worked well in every browser, but firefox got freezing only in Windows 7.
I solved the problem editing the firefox config "dom.ipc.plugins.enabled" to false. I don't know it will work, but it deserves to try.
精彩评论