Hi Volker,

Please note that non-trivial fixes should wait ~24hrs before integration to ensure a range of folk have an opportunity to comment.

Thanks,
David

On 17/09/2021 5:59 am, Volker Simonis wrote:
On Thu, 16 Sep 2021 19:27:40 GMT, Coleen Phillimore <cole...@openjdk.org> wrote:

Currently, `OopHandle::release()` is implemented as follows:

inline void OopHandle::release(OopStorage* storage) {
   if (peek() != NULL) {
     // Clear the OopHandle first
     NativeAccess<>::oop_store(_obj, (oop)NULL);
     storage->release(_obj);
   }
}

However, peek() returns NULL not only if the oop* `_obj` is NULL, but also when 
`_obj` points to a zero oop. In the latter case, the oop* `_obj` will not be 
released from the corresponding OopStorage and the slot it occupies will remain 
alive forever.

This behavior can be easily triggered with the `LeakTestMinimal.java` test 
which is attached to the [JBS 
issue](https://bugs.openjdk.java.net/browse/JDK-8273902)(thanks to Oli 
Gillespie from the Amazon Profiler team for detecting the issue and providing a 
reproducer).

This fix should probably also be downported to jdk17 as quickly as possible.

Yes, please backport.  Thank you for fixing this.

@coleenp, @sspitsyn thanks for the quick review!

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

PR: https://git.openjdk.java.net/jdk/pull/5549

Reply via email to