Can't yield from within an instance created by reflection

Remi Forax forax at univ-mlv.fr
Tue Apr 6 12:19:56 UTC 2021


----- Mail original -----
> De: "Øystein Myhre Andersen" <o.myhre at gmail.com>
> À: "loom-dev" <loom-dev at openjdk.java.net>
> Envoyé: Mardi 6 Avril 2021 13:51:39
> Objet: Can't yield from within an instance created by reflection

> From: Øystein Myhre Andersen.
> 
> Can't yield from within an instance created by reflection

Constructor.newInstance() is using NativeConstructorAccessorImpl which calls a C code that will invoke the constructor,
so once you are in the constructor you have a C function stack just below you on the stack.
The current implementation can only yield if there is no C function on the stack because yield copy the content on the stack and a C function may contain pointer to the stack that will be invalid when the content of the stack is copied back.

A simple solution is to not use Constructor.newInstance but MethodHandle.invoke() from a Lookup.findConstructor(),
as far as i know, it doesn't use a C function to call the constructor so it should be fine.

regards,
Rémi


More information about the loom-dev mailing list