Integrated: 8371944: AOT configuration is corrupted when app closes System.out
Ioi Lam
iklam at openjdk.org
Wed Nov 19 21:01:06 UTC 2025
On Sat, 15 Nov 2025 04:50:01 GMT, Ioi Lam <iklam at openjdk.org> wrote:
> During an AOT training run, some application may close `System.out` (usually inadvertently by naive code like the following):
>
>
> try (var err = new PrintWriter(System.err);
> var out = new PrintWriter(System.out)) {
> out.println("Hello Confused World");
> }
>
>
> This has the side effect of closing the JVM's STDOUT.
>
> When the JVM is about to exit, we will open the AOT configuration file for writing. On Windows we may get back a file HANDLE (which is just an integer) that's identical to the now closed STDOUT.
>
> If the JVM writes to STDOUT (usually with UL logging), it will corrupt the contents of the AOT configuration file.
>
> This doesn't happen on Posix as `System.out.close()` will keep file descriptions 1 and 2 open, preventing them from being reused by files that are opened in the future.
>
> The fix is to open the AOT configuration file early, before any application code is executed. That way we can guarantee that we will have a file HANDLE (or file descriptor) that's different than STDOUT.
>
> The test failed failed about 20% of the time on Windows before the fix. After the fix, it ran 100 times without failure.
This pull request has now been integrated.
Changeset: 1535d08f
Author: Ioi Lam <iklam at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/1535d08f0ee5da42d9db9e196d6a620aabe9feea
Stats: 130 lines in 6 files changed: 117 ins; 9 del; 4 mod
8371944: AOT configuration is corrupted when app closes System.out
Reviewed-by: kvn, iveresov
-------------
PR: https://git.openjdk.org/jdk/pull/28335
More information about the hotspot-runtime-dev
mailing list