--- a/src/java.base/macosx/native/libjli/java_md_macosx.m Wed Feb 27 14:45:17 2019 +0530
+++ b/src/java.base/macosx/native/libjli/java_md_macosx.m Wed Feb 27 13:13:15 2019 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -717,10 +717,17 @@
}
/*
- * Block current thread and continue execution in a new thread
+ * Signature adapter for pthread_create().
+ */
+static void* ThreadJavaMain(void* args) {
+ return (void*)(intptr_t)JavaMain(args);
+}
+
+/*
+ * Block current thread and continue execution in a new thread.
*/
int
-ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void * args) {
+CallJavaMainInNewThread(jlong stack_size, void* args) {
int rslt;
pthread_t tid;
pthread_attr_t attr;
@@ -728,22 +735,22 @@
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
if (stack_size > 0) {
- pthread_attr_setstacksize(&attr, stack_size);
+ pthread_attr_setstacksize(&attr, stack_size);
}
pthread_attr_setguardsize(&attr, 0); // no pthread guard page on java threads
- if (pthread_create(&tid, &attr, (void *(*)(void*))continuation, (void*)args) == 0) {
- void * tmp;
- pthread_join(tid, &tmp);
- rslt = (int)(intptr_t)tmp;
+ if (pthread_create(&tid, &attr, ThreadJavaMain, args) == 0) {
+ void* tmp;
+ pthread_join(tid, &tmp);
+ rslt = (int)(intptr_t)tmp;
} else {
- /*
- * Continue execution in current thread if for some reason (e.g. out of
- * memory/LWP) a new thread can't be created. This will likely fail
- * later in continuation as JNI_CreateJavaVM needs to create quite a
- * few new threads, anyway, just give it a try..
- */
- rslt = continuation(args);
+ /*
+ * Continue execution in current thread if for some reason (e.g. out of
+ * memory/LWP) a new thread can't be created. This will likely fail
+ * later in JavaMain as JNI_CreateJavaVM needs to create quite a
+ * few new threads, anyway, just give it a try..
+ */
+ rslt = JavaMain(args);
}
pthread_attr_destroy(&attr);
--- a/src/java.base/share/native/libjli/java.c Wed Feb 27 14:45:17 2019 +0530
+++ b/src/java.base/share/native/libjli/java.c Wed Feb 27 13:13:15 2019 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -388,8 +388,8 @@
} while (JNI_FALSE)
-int JNICALL
-JavaMain(void * _args)
+int
+JavaMain(void* _args)
{
JavaMainArgs *args = (JavaMainArgs *)_args;
int argc = args->argc;
@@ -2348,7 +2348,7 @@
args.what = what;
args.ifn = *ifn;
- rslt = ContinueInNewThread0(JavaMain, threadStackSize, (void*)&args);
+ rslt = CallJavaMainInNewThread(threadStackSize, (void*)&args);
/* If the caller has deemed there is an error we
* simply return that, otherwise we return the value of
* the callee
--- a/src/java.base/share/native/libjli/java.h Wed Feb 27 14:45:17 2019 +0530
+++ b/src/java.base/share/native/libjli/java.h Wed Feb 27 13:13:15 2019 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -156,10 +156,9 @@
void PrintMachineDependentOptions();
/*
- * Block current thread and continue execution in new thread
+ * Block current thread and continue execution in new thread.
*/
-int ContinueInNewThread0(int (JNICALL *continuation)(void *),
- jlong stack_size, void * args);
+int CallJavaMainInNewThread(jlong stack_size, void* args);
/* sun.java.launcher.* platform properties. */
void SetJavaLauncherPlatformProps(void);
@@ -224,7 +223,10 @@
jobjectArray NewPlatformStringArray(JNIEnv *env, char **strv, int strc);
jclass GetLauncherHelperClass(JNIEnv *env);
-int JNICALL JavaMain(void * args); /* entry point */
+/*
+ * Entry point.
+ */
+int JavaMain(void* args);
enum LaunchMode { // cf. sun.launcher.LauncherHelper
LM_UNKNOWN = 0,
--- a/src/java.base/unix/native/libjli/java_md_solinux.c Wed Feb 27 14:45:17 2019 +0530
+++ b/src/java.base/unix/native/libjli/java_md_solinux.c Wed Feb 27 13:13:15 2019 +0300
@@ -718,10 +718,17 @@
}
/*
- * Block current thread and continue execution in a new thread
+ * Signature adapter for pthread_create() or thr_create().
+ */
+static void* ThreadJavaMain(void* args) {
+ return (void*)(intptr_t)JavaMain(args);
+}
+
+/*
+ * Block current thread and continue execution in a new thread.
*/
int
-ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void * args) {
+CallJavaMainInNewThread(jlong stack_size, void* args) {
int rslt;
#ifndef __solaris__
pthread_t tid;
@@ -730,35 +737,35 @@
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
if (stack_size > 0) {
- pthread_attr_setstacksize(&attr, stack_size);
+ pthread_attr_setstacksize(&attr, stack_size);
}
pthread_attr_setguardsize(&attr, 0); // no pthread guard page on java threads
- if (pthread_create(&tid, &attr, (void *(*)(void*))continuation, (void*)args) == 0) {
- void * tmp;
- pthread_join(tid, &tmp);
- rslt = (int)(intptr_t)tmp;
+ if (pthread_create(&tid, &attr, ThreadJavaMain, args) == 0) {
+ void* tmp;
+ pthread_join(tid, &tmp);
+ rslt = (int)(intptr_t)tmp;
} else {
- /*
- * Continue execution in current thread if for some reason (e.g. out of
- * memory/LWP) a new thread can't be created. This will likely fail
- * later in continuation as JNI_CreateJavaVM needs to create quite a
- * few new threads, anyway, just give it a try..
- */
- rslt = continuation(args);
+ /*
+ * Continue execution in current thread if for some reason (e.g. out of
+ * memory/LWP) a new thread can't be created. This will likely fail
+ * later in JavaMain as JNI_CreateJavaVM needs to create quite a
+ * few new threads, anyway, just give it a try..
+ */
+ rslt = JavaMain(args);
}
pthread_attr_destroy(&attr);
#else /* __solaris__ */
thread_t tid;
long flags = 0;
- if (thr_create(NULL, stack_size, (void *(*)(void *))continuation, args, flags, &tid) == 0) {
- void * tmp;
- thr_join(tid, NULL, &tmp);
- rslt = (int)(intptr_t)tmp;
+ if (thr_create(NULL, stack_size, ThreadJavaMain, args, flags, &tid) == 0) {
+ void* tmp;
+ thr_join(tid, NULL, &tmp);
+ rslt = (int)(intptr_t)tmp;
} else {
- /* See above. Continue in current thread if thr_create() failed */
- rslt = continuation(args);
+ /* See above. Continue in current thread if thr_create() failed */
+ rslt = JavaMain(args);
}
#endif /* !__solaris__ */
return rslt;
--- a/src/java.base/windows/native/libjli/java_md.c Wed Feb 27 14:45:17 2019 +0530
+++ b/src/java.base/windows/native/libjli/java_md.c Wed Feb 27 13:13:15 2019 +0300
@@ -704,10 +704,17 @@
}
/*
- * Block current thread and continue execution in a new thread
+ * Signature adapter for _beginthreadex().
+ */
+static unsigned __stdcall ThreadJavaMain(void* args) {
+ return (unsigned)JavaMain(args);
+}
+
+/*
+ * Block current thread and continue execution in a new thread.
*/
int
-ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void * args) {
+CallJavaMainInNewThread(jlong stack_size, void* args) {
int rslt = 0;
unsigned thread_id;
@@ -722,20 +729,20 @@
* source (os_win32.cpp) for details.
*/
HANDLE thread_handle =
- (HANDLE)_beginthreadex(NULL,
- (unsigned)stack_size,
- continuation,
- args,
- STACK_SIZE_PARAM_IS_A_RESERVATION,
- &thread_id);
+ (HANDLE)_beginthreadex(NULL,
+ (unsigned)stack_size,
+ ThreadJavaMain,
+ args,
+ STACK_SIZE_PARAM_IS_A_RESERVATION,
+ &thread_id);
if (thread_handle == NULL) {
- thread_handle =
- (HANDLE)_beginthreadex(NULL,
- (unsigned)stack_size,
- continuation,
- args,
- 0,
- &thread_id);
+ thread_handle =
+ (HANDLE)_beginthreadex(NULL,
+ (unsigned)stack_size,
+ ThreadJavaMain,
+ args,
+ 0,
+ &thread_id);
}
/* AWT preloading (AFTER main thread start) */
@@ -772,11 +779,11 @@
#endif /* ENABLE_AWT_PRELOAD */
if (thread_handle) {
- WaitForSingleObject(thread_handle, INFINITE);
- GetExitCodeThread(thread_handle, &rslt);
- CloseHandle(thread_handle);
+ WaitForSingleObject(thread_handle, INFINITE);
+ GetExitCodeThread(thread_handle, &rslt);
+ CloseHandle(thread_handle);
} else {
- rslt = continuation(args);
+ rslt = JavaMain(args);
}
#ifdef ENABLE_AWT_PRELOAD