mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-18 06:15:16 +00:00
6999872: java.awt.Window instantiation leads to JVM CRASH on Windows, JDK7b118+ fastdebug
Reviewed-by: igor, dcherepanov
This commit is contained in:
parent
d2a42e4896
commit
2cb1aa0488
@ -70,7 +70,11 @@ static void EnsureJreInstallation(const char *jrepath);
|
||||
*/
|
||||
#undef ENABLE_AWT_PRELOAD
|
||||
#ifndef JAVA_ARGS /* turn off AWT preloading for javac, jar, etc */
|
||||
#define ENABLE_AWT_PRELOAD
|
||||
/* CR6999872: fastdebug crashes if awt library is loaded before JVM is
|
||||
* initialized*/
|
||||
#if !defined(DEBUG)
|
||||
#define ENABLE_AWT_PRELOAD
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_AWT_PRELOAD
|
||||
|
||||
@ -969,12 +969,15 @@ void D3DInitializer::InitImpl()
|
||||
}
|
||||
D3DPipelineManager *pMgr = D3DPipelineManager::CreateInstance();
|
||||
if (pMgr != NULL) {
|
||||
UINT adapterCount = pMgr->adapterCount;
|
||||
// init adapters if we are preloading
|
||||
if (AwtToolkit::GetInstance().GetPreloadThread().OnPreloadThread()) {
|
||||
UINT adapterCount = pMgr->adapterCount;
|
||||
|
||||
pAdapterIniters = new D3DAdapterInitializer[adapterCount];
|
||||
for (UINT i=0; i<adapterCount; i++) {
|
||||
pAdapterIniters[i].setAdapter(i);
|
||||
AwtToolkit::GetInstance().GetPreloadThread().AddAction(&pAdapterIniters[i]);
|
||||
pAdapterIniters = new D3DAdapterInitializer[adapterCount];
|
||||
for (UINT i=0; i<adapterCount; i++) {
|
||||
pAdapterIniters[i].setAdapter(i);
|
||||
AwtToolkit::GetInstance().GetPreloadThread().AddAction(&pAdapterIniters[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1904,6 +1904,11 @@ bool AwtToolkit::PreloadThread::InvokeAndTerminate(void(_cdecl *fn)(void *), voi
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AwtToolkit::PreloadThread::OnPreloadThread()
|
||||
{
|
||||
return GetThreadId() == ::GetCurrentThreadId();
|
||||
}
|
||||
|
||||
/*static*/
|
||||
unsigned WINAPI AwtToolkit::PreloadThread::StaticThreadProc(void *param)
|
||||
{
|
||||
|
||||
@ -559,6 +559,8 @@ public:
|
||||
CriticalSection::Lock lock(threadLock);
|
||||
return wrongThread;
|
||||
}
|
||||
// returns true if the current thread is "preload" thread
|
||||
bool OnPreloadThread();
|
||||
|
||||
private:
|
||||
// data access lock
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user