RFR: 8274397: [macOS] Stop setting env. var JAVA_MAIN_CLASS_<pid> in launcher code [v3]

Phil Race prr at openjdk.java.net
Wed Sep 29 03:50:32 UTC 2021


On Wed, 29 Sep 2021 03:39:09 GMT, Phil Race <prr at openjdk.org> wrote:

>> macOS launcher code sets JAVA_MAIN_CLASS_<pid> which is read by AWT to set the name of the application in the system menu bar.
>> 
>> Because this set shortly after the VM is running, it causes a thread safety issue described in https://bugs.openjdk.java.net/browse/JDK-8270549
>> 
>> Since the AWT already looks for the system property "apple.awt.application.name" for this same purpose,
>> we can set that instead of the env. var and avoid the threading issue.
>> 
>> This trades the JAVA_MAIN_CLASS_<pid> pollution of the environment for setting a system property which is visible to apps as well but it seems a reasonable trade-off since we already (implicitly) support this variable anyway in preference to the env. var.
>
> Phil Race has updated the pull request incrementally with one additional commit since the last revision:
> 
>   8274397: Stop setting env. var JAVA_MAIN_CLASS_<pid> in launcher code

And, oh, the env. var test code I needed to delete was checking not for a useful value but just that the env var was there.
I wrote a simple jtreg test or the new code that set the system property and tested the expected value (default or set)
but it seems jtreg makes MainWrapper the main class that is found regardless of main/othervm so I am currently grumbling quietly to myself about whether to add a test which is equivalent to the previous one which just tests the property has a value, 
or to (I suppose) write a more sophisticated test that has to exec another VM where it *should* be able to properly verify it.

-------------

PR: https://git.openjdk.java.net/jdk/pull/5724


More information about the core-libs-dev mailing list