Start routine: (void *(*)(void*))continuation. Where is the function?

Alexey Baranov pistoletik at gmail.com
Thu Sep 8 07:43:49 UTC 2016


Hi David,

> The discuss list is for discussion of the OpenJDK project as a whole, not
for specific code questions.
> This question, concerning the launcher, should be asked on
core-libs-dev at openjdk.java.net.

Ok.

>     rslt = ContinueInNewThread0(JavaMain, threadStackSize, (void*)&args);
> JavaMain is the function executed in the new thread.

Thank you for the help. Did not pay attention that the parameter is a
function name))


On Thu, Sep 8, 2016 at 10:33 AM, David Holmes <david.holmes at oracle.com>
wrote:

> Hi Alexey,
>
> The discuss list is for discussion of the OpenJDK project as a whole, not
> for specific code questions. This question, concerning the launcher, should
> be asked on core-libs-dev at openjdk.java.net.
>
> That said, look for:
>
>     rslt = ContinueInNewThread0(JavaMain, threadStackSize, (void*)&args);
>
> JavaMain is the function executed in the new thread. I can't tell from
> your fragment what version of the code you are looking at.
>
> Regards,
> David
>
>
> On 8/09/2016 1:40 AM, Alexey Baranov wrote:
>
>> Hello,
>>
>> The function int JLI_Launch, file jdk/src/share/bin/java.c, returns:
>> return JVMInit(&ifn, threadStackSize, argc, argv, mode, what, ret);
>>
>> Further along the call chain: JVMInit -> ContinueInNewThread ->
>> ContinueInNewThread0
>> we get to functions that I don't understand what's going on))
>>
>> ///////////////////////////////
>> /*
>>  * Block current thread and continue execution in a new thread
>>  */
>> int ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong
>> stack_size, void * args) {
>>     int rslt;
>> #ifndef __solaris__
>>     pthread_t tid;
>>     pthread_attr_t attr;
>>     pthread_attr_init(&attr);
>>     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
>>
>>     if (stack_size > 0) {
>>       pthread_attr_setstacksize(&attr, stack_size);
>>     }
>>
>>     if (pthread_create(&tid, &attr, (void *(*)(void*))continuation,
>> (void*)args) == 0) {
>>       void * tmp;
>>       pthread_join(tid, &tmp);
>>       rslt = (int)tmp;
>> ///////////////////////////////
>>
>> The new thread starts execution by invoking start routine:
>> (void *(*)(void*))continuation
>>
>> Please tell me where is the function that execution the new thread?
>>
>>


More information about the discuss mailing list