On Tue, 30 May 2023 14:39:21 GMT, Gerard Ziemski <gziem...@openjdk.org> wrote:
>>> I have one question though: why wouldn't it be enough to move `vm_created = >>> 1` from where we had it before, down to where we now have `vm_created = >>> COMPLETE` ? >> >> Because we need to prevent two threads from concurrently loading and >> initializing a VM in the same process. > >> > I have one question though: why wouldn't it be enough to move `vm_created >> > = 1` from where we had it before, down to where we now have `vm_created = >> > COMPLETE` ? >> >> Because we need to prevent two threads from concurrently loading and >> initializing a VM in the same process. > > Wouldn't it be less complex to use a lock or some "init once" mechanism > (pthread_once) instead of a 3 stage atomic field? Do we really need to know > whether the process is in the middle of initialization for any reason other > than whether it's actually done? > > Just to clarify - I'm OK with the fix you have proposed, I was just curious > if you considered any other alternatives. Thanks for the review @gerard-ziemski > Just to clarify - I'm OK with the fix you have proposed, I was just curious > if you considered any other alternatives. Atomics are the simplest cross-platform solution available at this stage of VM init (which is "nothing is initialized yet") - even Atomic use is limited to Atomic::xchg as we can't require any stubs. We have no VM locks available and anything external to the VM (like pthread_once) would require as OS-specific solution in shared code. ------------- PR Comment: https://git.openjdk.org/jdk/pull/14139#issuecomment-1569223117