RFR : 8195857 : Posix platforms : move os::is_headless_jre check coding to os::Posix and remove test for libmawt

Baesken, Matthias matthias.baesken at sap.com
Thu Jan 25 06:36:21 UTC 2018


> 
> Bottom line: os::is_headless_jre() is dead code as far as I can see.
>

Hi David,  so do you suggest I prepare a new webrev  where os::is_headless_jre()  is  completely removed ?

What about the code block in  hotspot/share/runtime/arguments.cpp  ,  do you think this can be completely removed as well ? 
 

3495  if (os::is_headless_jre()) {
3496    const char* headless = Arguments::get_property("java.awt.headless");
3497    if (headless == NULL) {
3498      const char *headless_env = ::getenv("JAVA_AWT_HEADLESS");
3499      if (headless_env == NULL) {
3500        if (!add_property("java.awt.headless=true")) {
3501          return JNI_ENOMEM;
3502        }
3503      } else {
3504        char buffer[256];
3505        jio_snprintf(buffer, sizeof(buffer), "java.awt.headless=%s", headless_env);
3506        if (!add_property(buffer)) {
3507          return JNI_ENOMEM;
3508        }
3509      }
3510    }
3511  }

Best regards, Matthias



> -----Original Message-----
> From: David Holmes [mailto:david.holmes at oracle.com]
> Sent: Donnerstag, 25. Januar 2018 02:16
> To: Bob Vandette <bob.vandette at oracle.com>
> Cc: Baesken, Matthias <matthias.baesken at sap.com>; hotspot-
> dev at openjdk.java.net
> Subject: Re: RFR : 8195857 : Posix platforms : move os::is_headless_jre check
> coding to os::Posix and remove test for libmawt
> 
> On 24/01/2018 11:16 PM, Bob Vandette wrote:
> >> On Jan 23, 2018, at 5:50 PM, David Holmes <david.holmes at oracle.com>
> wrote:
> >>
> >> Hi Bob,
> >>
> >> On 24/01/2018 1:25 AM, Bob Vandette wrote:
> >>> If we are going to preserve this functionality and make alterations, I
> suggest that
> >>> we try to move this into the desktop module and remove it from the
> hotspot sources.
> >>> Other than finding an appropriate path at startup to initialize the
> property, there is
> >>> no reason why this check can’t be written in Java.   This functionality has
> nothing to
> >>> do with Hotspot or VMs.  (I should have probably done this when I first
> added this check).
> >>
> >> Well we hacked it into the SE Embedded builds so we knew what lib was
> missing.
> >>
> >> I don't think what you suggest really makes sense in a modular world
> because I don't think we expect to have java.desktop but not some of its
> native parts - so there would be no trigger to force into headless mode.
> More likely there is simply no java.desktop module at all.
> > The automatic setting of java.awt.headless has nothing to do with compact
> profiles.  This support was available in JDK 7 before profiles even existed.
> This
> > automatic headless detection was added in order to allow Java to be
> ported to platforms that do not have a native windowing toolkit available.
> This was
> > used in embedded to also reduce the size of the binary by removing this
> big library.  A configuration that contains java.desktop can absolutely be
> supported
> > and the JCK can be passed without this native library.
> >
> > This Java property is only referenced by the desktop module.  This is why I
> suggested that this functionality be moved out of the hotspot VM.
> 
> Yes we forced the AWT into headless mode if there was no native graphics
> library support available. For some of those platforms we even did this
> at build time, not via a runtime check. For SE Embedded support we would
> strip the library out at image build time, and so the runtime check
> would force AWT into headless mode. For compact profiles there is no AWT
> at all, and no native library in the built image so the runtime check
> still (vacuously) sets the property for headless mode.
> 
> If you have the java.desktop module, then you have everything - there is
> no fragmentation of that module that I am aware of, that would allow you
> strip out the library that triggers os::is_headless_jre() or some other
> check that forces the AWT into headless mode. If you have java.desktop
> and you want headless mode then you have to ask for it explicitly.
> 
> Bottom line: os::is_headless_jre() is dead code as far as I can see.
> 
> Separately I'll file a bug to remove the compact profile builds.
> 
> David
> -----
> 
> > Bob.
> >
> >
> >>
> >> That said I was reminded that this is also used by the Compact Profiles
> that were added in Java 8, but for which support was removed as from Java 9
> (and modules). However the build logic is still present, and they still use this
> functionality. I think we can remove compact profiles completely in JDK 11,
> but that's a seperate tasks.
> >>
> >> Meanwhile if we kill off the os::is_headless_jre() logic then the compact
> profiles would not default to headless mode even though they can't run
> headful (due to the missing native library as well as other Java APIs). But the
> only impact I can see there would be for running tests - and we're not testing
> compact profiles. So ... I still think this can be removed, but want to do a
> couple more checks.
> >>
> >> Cheers,
> >> David
> >>
> >>> Bob.
> >>>> On Jan 23, 2018, at 5:57 AM, Baesken, Matthias
> <matthias.baesken at sap.com> wrote:
> >>>>
> >>>> Hi David, thanks for the comments.
> >>>>
> >>>>> I'd need to do some checking but I think this may all be effectively
> >>>>> dead code.
> >>>>
> >>>> Please do the checking, maybe we can completely remove it.
> >>>>
> >>>> Best Regards, Matthias
> >>>>
> >>>>
> >>>>> -----Original Message-----
> >>>>> From: David Holmes [mailto:david.holmes at oracle.com]
> >>>>> Sent: Dienstag, 23. Januar 2018 11:30
> >>>>> To: Baesken, Matthias <matthias.baesken at sap.com>; 'hotspot-
> >>>>> dev at openjdk.java.net' <hotspot-dev at openjdk.java.net>
> >>>>> Subject: Re: RFR : 8195857 : Posix platforms : move
> os::is_headless_jre check
> >>>>> coding to os::Posix and remove test for libmawt
> >>>>>
> >>>>> Hi Matthias,
> >>>>>
> >>>>> Some preliminary comments ...
> >>>>>
> >>>>> On 23/01/2018 6:24 PM, Baesken, Matthias wrote:
> >>>>>> Hello,  I  noticed that  os::is_headless_jre()  still checks  on the Posix
> >>>>> platforms  for libmawt  which is not present any longer.
> >>>>>
> >>>>> I wonder why that comment was put in but the code not changed ...
> >>>>>
> >>>>>> Additionally the  os::is_headless_jre()   function could be  put in a
> central
> >>>>> place at os_posix  to avoid code duplication.
> >>>>>
> >>>>> I think you could simplify further and just define in os.cpp with three
> >>>>> cases: windows, OS X, posix. I normally wouldn't suggest that but
> given
> >>>>> Windows and OS X are always false, it's quite trivial.
> >>>>>
> >>>>> That said this may simplify even further because I don't know if the
> >>>>> concept of a headless JRE is even meaningful anymore. This what put
> in
> >>>>> place in 2010 to support Java SE Embedded. We had a special build
> >>>>> process that would remove the library from the JRE image, then a
> runtime
> >>>>> check os::is_headless_jre() run during argument processing, that if
> >>>>> true, caused the java.awt.headless property to be set to true (unless
> >>>>> already set). I don't think we can even build a "headless JRE" any
> more.
> >>>>>
> >>>>> I'd need to do some checking but I think this may all be effectively
> >>>>> dead code.
> >>>>>
> >>>>> Thanks,
> >>>>> David
> >>>>> -------
> >>>>>
> >>>>>> Could you please review my change .
> >>>>>>
> >>>>>> Webrev :
> >>>>>>
> >>>>>> http://cr.openjdk.java.net/~mbaesken/webrevs/8195857/
> >>>>>>
> >>>>>> Bug :
> >>>>>>
> >>>>>> https://bugs.openjdk.java.net/browse/JDK-8195857
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Thanks, Matthias
> >>>>>>
> >


More information about the hotspot-dev mailing list