2011-08-22 5 views
0

파이어 폭스/크롬 용 npruntime 기반 플러그인과 ff3.6/chrome 10과 함께 작동하는 플러그인을 개발했지만 플러그인을로드 한 후 다른 플러그인을 파이어 폭스 4.0 이상에서로드 할 때 , firefox가 응답하지 않는다. 즉, 내 플러그인이로드 된 후 Gmail을 열면 Firefox가 응답을 중지하고 플러그인 컨테이너와 관련이 있다는 것을 확인했다. 누구나 정확히 내가 잘못 가고있는 곳을 제안 할 수 있습니까 ?? 모든 포인터는 감사하겠습니다. 미리파이어 폭스 4.0 이상에서 문제가있는 npapi 플러그인

덕분에 이 FF6위한 호출 스택

[email protected]()
[email protected]()
[email protected] (인) [email protected]()
nspr4.dll! _PR_MD_WAIT_CV (CV _MDCVar *, * _MDLock 잠금 부호 INT 시간 초과)
nspr4.dll! _PR_WaitCondVar (PRThread * 스레드의 PRCondVar의 cvar *, * 잠금 PRLock , 부호없는 int timeout)
nspr4.dll! PR_WaitCondVar (PRCondVar의 *의 cvar, 서명되지 않은 INT 시간 제한)
xul.dll! 모질라 :: CondVar :: 기다립니다 (부호 간격 INT)
xul.dll! 모질라 :: IPC :: GeckoChildProcessHost :: SyncLaunch (기본 : ProcessArchitecture arch) xul.dll! mozilla :: plugins :: PluginProcessParent :: Launch (기본 : ProcessArchitecture arch) xul.dll
(timeoutMs INT)! 모질라 :: 플러그인 :: PluginModuleParent ::을 LoadModule (const를 문자 * 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 * 플러그인)
xul.dll! nsPluginHost :: GetPlugin (const를 문자 * aMimeType, nsNPAPIPlugin * * aPlugin)
xul.dll! nsPluginHost :: TrySetUpPluginInstance (CONST의 char *의 aMimeType, nsIURI * aURL, nsIPluginInstanceOwner * aOwner) xul.dll! nsPluginHost :: SetUpPluginInstance (const를 문자 * aMimeType, nsIURI * aURL, nsIPluginInstanceOwner * aOwner)
xul.dll! nsPluginHost :: InstantiateEmbeddedPlugin (const char * aMimeType, nsIURI * aURL, nsIPluginInstanceOwner * aOwner, int aAllowOpeningStreams) ...

+0

실행중인 운영 체제는 무엇입니까? 디버거를 연결하여 코드에서 멈춘 부분을 확인해 봤니? – taxilian

+0

윈도우 7을 실행 중입니다 ... 그리고 스택 호출이 추가되었습니다 ... – mohit

답변

1

먼저 IPC 모드를 끕니다. 스택은 플러그인 프로세스가 시작될 때까지 기다리는 동안 매달려 있음을 나타낼 수 있지만 타임 아웃이 있어야하는 이유는 모르겠다. IPC 모드를 해제하면 브라우저와 플러그인 호스트 프로세스 사이의 IPC를 방해하는 문제가 발생할 수 있습니다.

다음은 DLL의 모든 진입 점에 중단 점을 추가하려고합니다. DllMain에 sleep (10000) 또는 비슷한 것을 넣으면 디버거를 연결할 수 있습니다. 플러그인이 로딩을 시작할 때 anythign을 수행하기 전에 우선적으로 손상을 입히고 디버거로 플러그인 호스트 프로세스에 연결 한 다음 어떤 진입 점이 있는지 확인하십시오. 충분히 오랫동안 스테핑하면 결국 단서가 생깁니다 무슨 일이 일어날 지에 대해서.

FireBreath과 같은 것으로 이식 해 볼 수도 있습니다.이 기능은 잘 작동하지 않는 것으로 알려져 있으며 일부 브라우저에서는 마음에 들지 않는 실수를 저 지르지 않을 가능성이 가장 큽니다.

0

모든 브라우저에 대해 npruntime을 개발했습니다. 모든 브라우저에서 잘 작동했지만 파이어 폭스는 Windows 7에서만 고정되었습니다.

Firefox의 "dom.ipc.plugins.enabled"편집 문제를 false로 해결했습니다. 그것이 효과가 있을지 모르지만 시도해 볼 가치가 있습니다.