RFR: 8334433: jshell.exe runs an executable test.exe on startup

Jaikiran Pai jpai at openjdk.org
Sun Jun 23 04:23:15 UTC 2024


On Sun, 23 Jun 2024 04:18:45 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

>> JLine has multiple providers that can setup and work with the native terminals. As part of an upgrade to JLine 3.26.1 (https://github.com/openjdk/jdk/pull/18142), a first phase of checks in the terminal providers providers runs fairly soon, when the providers are gathered. There is also a provider which setups the terminals using command line utilities - the "exec" provider. And this provider currently runs the "test" command line utility during the gathering phase, which (I believe) was not the case in previous version. I.e. even if some other provider is used to work with the terminal, the "exec" terminal might run the "test" utility anyway.
>> 
>> We currently largely don't need the "exec" provider at all - we currently primarily use a semi-native provider based on FFM. The "exec" provider is, I believe, used on platforms for which the FFM provider is not implemented, which is probably primarily AIX.
>> 
>> The proposal herein is twofold:
>> - disable the "exec" terminal on platforms for the FFM provider should work (Windows, Linux, Mac)
>> - make the "exec" provider ignore the `PATH` environment variable, and use hardcoded value.
>> 
>> I tested this on Windows with `cmd`, Cygwin and MSYS, and on Linux and seemed to work fine.
>> 
>> @MBaesken, please let me know what you think of this change.
>> 
>> I would like to backport this to JDK 23.
>
> test/langtools/jdk/jshell/TerminalNoExecTest.java line 68:
> 
>> 66:                 System.exit(1);
>> 67:             }
>> 68:             System.exit(0);
> 
> Hello Jan, calling `System.exit()` from within the jtreg test isn't recommended as noted in https://openjdk.org/jtreg/faq.html#should-a-test-call-the-system.exit-method. Just throwing a exception should fail the test here - something like `throw new AssertionError("jshell unexpectedly spawned a new process");`

Please ignore my previous comment. I now see what's being done here - although this is a jtreg test class, the test itself launches this class as a main application through `ProcessBuilder` and it's only in that flow that the `System.exit(...)` gets called. I think that is fine.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/19828#discussion_r1649895405


More information about the kulla-dev mailing list