提交 726ca1ac 编写于 作者: C coffeys

Merge

...@@ -207,7 +207,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJAVA, \ ...@@ -207,7 +207,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJAVA, \
LDFLAGS_SUFFIX_windows := -export:winFileHandleOpen -export:handleLseek \ LDFLAGS_SUFFIX_windows := -export:winFileHandleOpen -export:handleLseek \
jvm.lib $(BUILD_LIBFDLIBM) $(WIN_VERIFY_LIB) \ jvm.lib $(BUILD_LIBFDLIBM) $(WIN_VERIFY_LIB) \
shell32.lib delayimp.lib -DELAYLOAD:shell32.dll \ shell32.lib delayimp.lib -DELAYLOAD:shell32.dll \
advapi32.lib, \ advapi32.lib version.lib, \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \ VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \ RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=java.dll" \ -D "JDK_FNAME=java.dll" \
......
...@@ -348,8 +348,8 @@ java_props_t * ...@@ -348,8 +348,8 @@ java_props_t *
GetJavaProperties(JNIEnv* env) GetJavaProperties(JNIEnv* env)
{ {
static java_props_t sprops = {0}; static java_props_t sprops = {0};
int majorVersion;
OSVERSIONINFOEX ver; int minorVersion;
if (sprops.line_separator) { if (sprops.line_separator) {
return &sprops; return &sprops;
...@@ -380,21 +380,67 @@ GetJavaProperties(JNIEnv* env) ...@@ -380,21 +380,67 @@ GetJavaProperties(JNIEnv* env)
/* OS properties */ /* OS properties */
{ {
char buf[100]; char buf[100];
SYSTEM_INFO si; boolean is_workstation;
PGNSI pGNSI; boolean is_64bit;
DWORD platformId;
{
OSVERSIONINFOEX ver;
ver.dwOSVersionInfoSize = sizeof(ver); ver.dwOSVersionInfoSize = sizeof(ver);
GetVersionEx((OSVERSIONINFO *) &ver); GetVersionEx((OSVERSIONINFO *) &ver);
majorVersion = ver.dwMajorVersion;
minorVersion = ver.dwMinorVersion;
is_workstation = (ver.wProductType == VER_NT_WORKSTATION);
platformId = ver.dwPlatformId;
sprops.patch_level = _strdup(ver.szCSDVersion);
}
{
SYSTEM_INFO si;
ZeroMemory(&si, sizeof(SYSTEM_INFO)); ZeroMemory(&si, sizeof(SYSTEM_INFO));
// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise. GetNativeSystemInfo(&si);
pGNSI = (PGNSI) GetProcAddress(
GetModuleHandle(TEXT("kernel32.dll")), is_64bit = (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64);
"GetNativeSystemInfo"); }
if(NULL != pGNSI) do {
pGNSI(&si); // Read the major and minor version number from kernel32.dll
else VS_FIXEDFILEINFO *file_info;
GetSystemInfo(&si); WCHAR kernel32_path[MAX_PATH];
DWORD version_size;
LPTSTR version_info;
UINT len, ret;
// Get the full path to \Windows\System32\kernel32.dll and use that for
// determining what version of Windows we're running on.
len = MAX_PATH - (UINT)strlen("\\kernel32.dll") - 1;
ret = GetSystemDirectoryW(kernel32_path, len);
if (ret == 0 || ret > len) {
break;
}
wcsncat(kernel32_path, L"\\kernel32.dll", MAX_PATH - ret);
version_size = GetFileVersionInfoSizeW(kernel32_path, NULL);
if (version_size == 0) {
break;
}
version_info = (LPTSTR)malloc(version_size);
if (version_info == NULL) {
break;
}
if (!GetFileVersionInfoW(kernel32_path, 0, version_size, version_info)) {
free(version_info);
break;
}
if (!VerQueryValueW(version_info, L"\\", (LPVOID*)&file_info, &len)) {
free(version_info);
break;
}
majorVersion = HIWORD(file_info->dwProductVersionMS);
minorVersion = LOWORD(file_info->dwProductVersionMS);
free(version_info);
} while (0);
/* /*
* From msdn page on OSVERSIONINFOEX, current as of this * From msdn page on OSVERSIONINFOEX, current as of this
...@@ -420,17 +466,15 @@ GetJavaProperties(JNIEnv* env) ...@@ -420,17 +466,15 @@ GetJavaProperties(JNIEnv* env)
* Windows Server 2008 R2 6 1 (!VER_NT_WORKSTATION) * Windows Server 2008 R2 6 1 (!VER_NT_WORKSTATION)
* Windows 8 6 2 (VER_NT_WORKSTATION) * Windows 8 6 2 (VER_NT_WORKSTATION)
* Windows Server 2012 6 2 (!VER_NT_WORKSTATION) * Windows Server 2012 6 2 (!VER_NT_WORKSTATION)
* Windows 10 10 0 (VER_NT_WORKSTATION)
* *
* This mapping will presumably be augmented as new Windows * This mapping will presumably be augmented as new Windows
* versions are released. * versions are released.
*/ */
switch (ver.dwPlatformId) { switch (platformId) {
case VER_PLATFORM_WIN32s:
sprops.os_name = "Windows 3.1";
break;
case VER_PLATFORM_WIN32_WINDOWS: case VER_PLATFORM_WIN32_WINDOWS:
if (ver.dwMajorVersion == 4) { if (majorVersion == 4) {
switch (ver.dwMinorVersion) { switch (minorVersion) {
case 0: sprops.os_name = "Windows 95"; break; case 0: sprops.os_name = "Windows 95"; break;
case 10: sprops.os_name = "Windows 98"; break; case 10: sprops.os_name = "Windows 98"; break;
case 90: sprops.os_name = "Windows Me"; break; case 90: sprops.os_name = "Windows Me"; break;
...@@ -441,10 +485,10 @@ GetJavaProperties(JNIEnv* env) ...@@ -441,10 +485,10 @@ GetJavaProperties(JNIEnv* env)
} }
break; break;
case VER_PLATFORM_WIN32_NT: case VER_PLATFORM_WIN32_NT:
if (ver.dwMajorVersion <= 4) { if (majorVersion <= 4) {
sprops.os_name = "Windows NT"; sprops.os_name = "Windows NT";
} else if (ver.dwMajorVersion == 5) { } else if (majorVersion == 5) {
switch (ver.dwMinorVersion) { switch (minorVersion) {
case 0: sprops.os_name = "Windows 2000"; break; case 0: sprops.os_name = "Windows 2000"; break;
case 1: sprops.os_name = "Windows XP"; break; case 1: sprops.os_name = "Windows XP"; break;
case 2: case 2:
...@@ -459,8 +503,7 @@ GetJavaProperties(JNIEnv* env) ...@@ -459,8 +503,7 @@ GetJavaProperties(JNIEnv* env)
* If it is, the operating system is Windows XP 64 bit; * If it is, the operating system is Windows XP 64 bit;
* otherwise, it is Windows Server 2003." * otherwise, it is Windows Server 2003."
*/ */
if(ver.wProductType == VER_NT_WORKSTATION && if (is_workstation && is_64bit) {
si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
sprops.os_name = "Windows XP"; /* 64 bit */ sprops.os_name = "Windows XP"; /* 64 bit */
} else { } else {
sprops.os_name = "Windows 2003"; sprops.os_name = "Windows 2003";
...@@ -468,12 +511,12 @@ GetJavaProperties(JNIEnv* env) ...@@ -468,12 +511,12 @@ GetJavaProperties(JNIEnv* env)
break; break;
default: sprops.os_name = "Windows NT (unknown)"; break; default: sprops.os_name = "Windows NT (unknown)"; break;
} }
} else if (ver.dwMajorVersion == 6) { } else if (majorVersion == 6) {
/* /*
* See table in MSDN OSVERSIONINFOEX documentation. * See table in MSDN OSVERSIONINFOEX documentation.
*/ */
if (ver.wProductType == VER_NT_WORKSTATION) { if (is_workstation) {
switch (ver.dwMinorVersion) { switch (minorVersion) {
case 0: sprops.os_name = "Windows Vista"; break; case 0: sprops.os_name = "Windows Vista"; break;
case 1: sprops.os_name = "Windows 7"; break; case 1: sprops.os_name = "Windows 7"; break;
case 2: sprops.os_name = "Windows 8"; break; case 2: sprops.os_name = "Windows 8"; break;
...@@ -481,7 +524,7 @@ GetJavaProperties(JNIEnv* env) ...@@ -481,7 +524,7 @@ GetJavaProperties(JNIEnv* env)
default: sprops.os_name = "Windows NT (unknown)"; default: sprops.os_name = "Windows NT (unknown)";
} }
} else { } else {
switch (ver.dwMinorVersion) { switch (minorVersion) {
case 0: sprops.os_name = "Windows Server 2008"; break; case 0: sprops.os_name = "Windows Server 2008"; break;
case 1: sprops.os_name = "Windows Server 2008 R2"; break; case 1: sprops.os_name = "Windows Server 2008 R2"; break;
case 2: sprops.os_name = "Windows Server 2012"; break; case 2: sprops.os_name = "Windows Server 2012"; break;
...@@ -489,6 +532,17 @@ GetJavaProperties(JNIEnv* env) ...@@ -489,6 +532,17 @@ GetJavaProperties(JNIEnv* env)
default: sprops.os_name = "Windows NT (unknown)"; default: sprops.os_name = "Windows NT (unknown)";
} }
} }
} else if (majorVersion == 10) {
if (is_workstation) {
switch (minorVersion) {
case 0: sprops.os_name = "Windows 10"; break;
default: sprops.os_name = "Windows NT (unknown)";
}
} else {
switch (minorVersion) {
default: sprops.os_name = "Windows NT (unknown)";
}
}
} else { } else {
sprops.os_name = "Windows NT (unknown)"; sprops.os_name = "Windows NT (unknown)";
} }
...@@ -497,7 +551,7 @@ GetJavaProperties(JNIEnv* env) ...@@ -497,7 +551,7 @@ GetJavaProperties(JNIEnv* env)
sprops.os_name = "Windows (unknown)"; sprops.os_name = "Windows (unknown)";
break; break;
} }
sprintf(buf, "%d.%d", ver.dwMajorVersion, ver.dwMinorVersion); sprintf(buf, "%d.%d", majorVersion, minorVersion);
sprops.os_version = _strdup(buf); sprops.os_version = _strdup(buf);
#if _M_IA64 #if _M_IA64
sprops.os_arch = "ia64"; sprops.os_arch = "ia64";
...@@ -508,9 +562,6 @@ GetJavaProperties(JNIEnv* env) ...@@ -508,9 +562,6 @@ GetJavaProperties(JNIEnv* env)
#else #else
sprops.os_arch = "unknown"; sprops.os_arch = "unknown";
#endif #endif
sprops.patch_level = _strdup(ver.szCSDVersion);
sprops.desktop = "windows"; sprops.desktop = "windows";
} }
...@@ -621,7 +672,7 @@ GetJavaProperties(JNIEnv* env) ...@@ -621,7 +672,7 @@ GetJavaProperties(JNIEnv* env)
&display_encoding); &display_encoding);
sprops.sun_jnu_encoding = getEncodingInternal(systemDefaultLCID); sprops.sun_jnu_encoding = getEncodingInternal(systemDefaultLCID);
if (LANGIDFROMLCID(userDefaultLCID) == 0x0c04 && ver.dwMajorVersion == 6) { if (LANGIDFROMLCID(userDefaultLCID) == 0x0c04 && majorVersion == 6) {
// MS claims "Vista has built-in support for HKSCS-2004. // MS claims "Vista has built-in support for HKSCS-2004.
// All of the HKSCS-2004 characters have Unicode 4.1. // All of the HKSCS-2004 characters have Unicode 4.1.
// PUA code point assignments". But what it really means // PUA code point assignments". But what it really means
......
...@@ -52,6 +52,8 @@ ...@@ -52,6 +52,8 @@
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 8.1 --> <!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application> </application>
</compatibility> </compatibility>
......
...@@ -79,23 +79,18 @@ public final class LFMultiThreadCachingTest extends LFCachingTestCase { ...@@ -79,23 +79,18 @@ public final class LFMultiThreadCachingTest extends LFCachingTestCase {
CountDownLatch end = new CountDownLatch(CORES); CountDownLatch end = new CountDownLatch(CORES);
final Map<Thread, Throwable> threadUncaughtExceptions final Map<Thread, Throwable> threadUncaughtExceptions
= Collections.synchronizedMap(new HashMap<Thread, Throwable>(CORES)); = Collections.synchronizedMap(new HashMap<Thread, Throwable>(CORES));
Thread.UncaughtExceptionHandler exHandler = (t, e) -> {
threadUncaughtExceptions.put(t, e);
};
for (int i = 0; i < CORES; ++i) { for (int i = 0; i < CORES; ++i) {
TestMethods.Kind kind = KINDS[i % KINDS.length]; TestMethods.Kind kind = KINDS[i % KINDS.length];
Thread t = new Thread(() -> { Thread t = new Thread(() -> {
try { try {
begin.await(); begin.await();
adapters.add(getTestMethod().getTestCaseMH(data, kind)); adapters.add(getTestMethod().getTestCaseMH(data, kind));
} catch (InterruptedException | BrokenBarrierException } catch (Throwable ex) {
| IllegalAccessException | NoSuchMethodException ex) { threadUncaughtExceptions.put(Thread.currentThread(), ex);
throw new Error("Unexpected exception", ex);
} finally { } finally {
end.countDown(); end.countDown();
} }
}); });
t.setUncaughtExceptionHandler(exHandler);
t.start(); t.start();
} }
try { try {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册