On Thu, 27 Mar 2025 13:51:51 GMT, Robert Toyonaga <d...@openjdk.org> wrote:

> > > > > > I don't understand why we don't treat that as a fatal error OR make 
> > > > > > sure that all call-sites handles that error, which they don't do 
> > > > > > today.
> > > > > 
> > > > > 
> > > > > I think release/uncommit failures should be handled by the callers. 
> > > > > Currently, uncommit failure is handled in most places by the caller, 
> > > > > release failure seems mostly not. Since, at least for uncommit, we 
> > > > > could sometimes fail for valid reasons, I think we shouldn't fail 
> > > > > fatally in the os:: functions.
> > > > 
> > > > 
> > > > I would like to drill a bit deeper into this. Do you have any concrete 
> > > > examples of an uncommit failure that should not be handled as a fatal 
> > > > error?
> > > 
> > > 
> > > [`VirtualSpace::shrink_by`](https://github.com/openjdk/jdk/blob/jdk-25%2B15/src/hotspot/share/memory/virtualspace.cpp#L373)
> > >  allows uncommit to fail without crashing. I'm not certain of the 
> > > intention behind that. But it seems like it's because shrinking is an 
> > > optimization and not always critical that it be done immediately. 
> > > [[1](https://github.com/openjdk/jdk/blob/jdk-25%2B15/src/hotspot/share/gc/serial/tenuredGeneration.cpp#L258)]
> > 
> > 
> > The above example shows code that assumes that it is OK to fail 
> > uncommitting and continuing. I'm trying to figure it that assumption is 
> > true. So, what I meant was that I was looking for a concrete example of a 
> > failure mode of uncommit that would be an acceptable (safe) failure to 
> > continue executing from. That is, a valid failure that don't mess up the 
> > memory in an unpredictable/unknowable way.
> 
> So release/uncommit (via mmap,munmap, VirtualFree) could fail due to: ① Bad 
> arguments, or ② The OS encountered an issue out of control of the JVM.
> 
> ① JVM bug. Reasonable to fatally fail here. Or the caller could be 
> intentionally passing arguments that may or may not be valid. I don't think 
> there is any code like that currently.
> 
> ② The only errors that aren't due to bad arugments are ENOMEM and ones 
> related to file descriptors (which are not applicable to uncommit). 
> VirtualFree only fails due to bad arguments according to windows docs.
> 
> So if there's consensus that ENOMEM is not recoverable (or rare enough to not 
> worry about), then it seems like its OK to fatally fail in all scenarios.

+1

Thanks for investigating the details of this (also nothing we couldn't change 
later if it bugs us).

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

PR Comment: https://git.openjdk.org/jdk/pull/24084#issuecomment-2760736918

Reply via email to