RFR: 8223271: SplashScreen is still shown if defaulting to headless on MacOS
philip.race at oracle.com
Fri May 24 16:35:15 UTC 2019
Webrev : http://cr.openjdk.java.net/~prr/8223271/
Whilst working on removing some inappropriate coupling of the java
launcher and the desktop module,
and testing out the -splash option, I noticed that on MacOS, in the case
when we *default* to headless
mode (which happens when we determine that we are not in a desktop
session), the launcher still
invokes the splash screen code. This could cause an application to
The problem is explained in detail in the bug report, but briefly, the
launcher isn't aware of this
defaulting to headless. And the calls the launcher makes to the
dynamically loaded splashscreen
code, don't return any value it can use to be aware of this.
So this fix updates "DoSplashInit()" to return such a code, and in the
event of a headful session
not being available, it can bail out and not try to show the splashscreen.
That is the gist of the small set of changes in java.c that relate to
However I also observed a small memory leak.
There are static variables
static char* splash_jar_entry = NULL; static char* splash_file_entry =
which are meant to hold the location of the splash image.
When everything is done the malloced storage these point to is freed ...
except that the malloc code looks like this :-
char* splash_file_entry = JLI_MemAlloc(JLI_StrLen(SPLASH_FILE_ENV_ENTRY "=")+JLI_StrLen(splash_file_name)+1);
char* splash_jar_entry = JLI_MemAlloc(JLI_StrLen(SPLASH_JAR_ENV_ENTRY "=")+JLI_StrLen(splash_jar_name)+1);
So the static vars are never used and the storage pointed to by local
variables is never freed.
So I am fixing that too.
The rest of the fix is in the splashscreen code in the desktop module
and it implements
the return of the status code described above.
There was one leak there too - a stream was not closed in a case where
the splash could
not be displayed.
The regression tests for splash screen were run, but testing this is
more an environmental issue -
sshing into a MacOS system and running tests and demos which would try
to display a splash
and verifying they no longer do, so I didn't see a way to add a specific
More information about the core-libs-dev