Плагин npapi имеет проблемы с Firefox 4.0 и более поздними версиями

Я разработал плагин на основе npruntime для firefox/chrome, и он отлично работает с ff3.6/chrome 10, но когда я загружаю любой другой плагин в firefox 4.0 или более поздней версии после загрузки моего плагина, тогда firefox зависает, т.е. если я открываю gmail после моего плагина был загружен, затем firefox перестает отвечать, и я убедился, что он как-то связан с контейнером плагинов. кто-нибудь может подсказать, где именно я ошибаюсь?? любые указатели будут оценены. заранее спасибо

это стек вызовов для 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, тайм-аут без знака int)
nspr4.dll!_PR_WaitCondVar(PRThread * thread, PRCondVar * cvar, PRLock * lock, тайм-аут без знака int)
nspr4.dll!PR_WaitCondVar(PRCondVar * cvar , тайм-аут без знака int)
xul.dll!mozilla::CondVar::Wait(интервал без знака int)
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) ...


person mohit    schedule 22.08.2011    source источник
comment
Какая у вас операционная система? Вы пытались подключить отладчик, чтобы увидеть, где в коде он завис?   -  person taxilian    schedule 22.08.2011
comment
я использую Windows 7... и добавлен стек вызовов...   -  person mohit    schedule 12.09.2011


Ответы (2)


Я бы попробовал сначала отключить режим IPC; ваш стек, кажется, указывает на то, что он зависает в ожидании запуска процесса плагина, но я не знаю, почему он зависает там, поскольку у него должен быть тайм-аут. Если отключение режима IPC помогает, то проблема, вероятно, заключается в том, что что-то мешает IPC между браузером и хост-процессами плагина.

Затем я бы попробовал добавить точки останова ко всем точкам входа в DLL. Вы можете подключить отладчик, поставив sleep(10000) или что-то подобное в DllMain; когда плагин начинает загружаться, он должен сначала нажать на это, прежде чем делать что-либо потенциально опасное, и вы можете подключиться к хост-процессу плагина с помощью отладчика, а затем проверить, какие точки входа вы делаете, и т. д. Достаточно долгое прохождение должно в конечном итоге дать некоторые подсказки. о том, что может происходить.

Вы также можете попробовать перенести его на что-то вроде FireBreath, которое, как известно, работает и снижает вероятность того, что вы нужно сделать неясную ошибку, как это, вероятно, то, что некоторые браузеры не любят.

person taxilian    schedule 12.09.2011

Я разработал npruntime для каждого браузера. Он хорошо работал во всех браузерах, но Firefox зависал только в Windows 7.

Я решил проблему, редактируя конфигурацию firefox «dom.ipc.plugins.enabled» на false. Не знаю, сработает ли, но стоит попробовать.

person user2492824    schedule 17.06.2013