RFR(s) 8153711: [REDO] JDWP: Memory Leak: GlobalRefs never deleted when processing invokeMethod command
Severin Gehwolf
sgehwolf at redhat.com
Tue Apr 19 09:16:48 UTC 2016
Hi,
On Tue, 2016-04-19 at 01:33 -0700, serguei.spitsyn at oracle.com wrote:
> Hi Severin,
>
> Please, find my comments below.
>
> On 4/15/16 13:52, serguei.spitsyn at oracle.com wrote:
> > On 4/15/16 11:59, Dmitry Samersoff wrote:
> > > Severin,
> > >
> > > Looks good for me.
> > >
> > > But I'm a little afraid of the fact that now we are holding
> > > eventHandler_lock while doing invoke*.
> >
> > It seems, I have this concern too.
> > Please, let me take a look closer at this part if it is done in a right way.
>
> Ok, my question was not about the eventHandler_lock, but about the invokerLock. Please, see below.
>
> >
> >
> > >
> > > So please hold on with backports until the fix bakes in jdk9 for some time.
> > +1
> > Thanks,
> > Serguei
> >
> > >
> > > -Dmitry
> > >
> > > On 2016-04-15 19:53, Severin Gehwolf wrote:
> > > > Hi,
> > > >
> > > > Here is a patch which is a redo of the fix for JDK-4858370 which got
> > > > backed out due to it causing test regressions. Specifically problems
> > > > were reported for com/sun/jdi/InvokeTest.java
> > > > and com/sun/jdi/InterfaceMethodsTest.java with the fix for JDK-4858370
> > > > applied.
> > > >
> > > > Those test regressions were caused because:
> > > > a.) The fix for JDK-4858370 deleted refs from the request object
> > > > while *not* holding the invoker lock.
>
> > > > b.) Invokes done via invoker_doInvoke() save global references, but
> > > > don't hold the invoker lock either.
>
> It seems, the invokerLock is to protect any uses of the 'request' pointer that points
> to the field ThreadNode.currentInvoke, not to protect the saveGlobalRef() call itself.
> So that, we have a hole in synchronization that you nicely discovered.
Yes, that's right. saveGlobalRef() saves references by using the request pointer.
> Here is a couple of more places where the 'request' pointer is not protected with
> the invokerLock:
> invoker_enableInvokeRequests(), invoker_isPending(), invoker_isEnabled().
>
> I've filed a new bug:
> https://bugs.openjdk.java.net/browse/JDK-8154529
>
> BTW, these are pretty simple or rare cases that do not harm much.
> The function invoker_isPending() is not used at all.
OK.
> Please, consider your fix reviewed.
Thanks!
The hg exported changeset is here:
http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8153711/JDK-8153711-jdk9-jdk.export.patch
I'd need somebody to sponsor this for me.
Cheers,
Severin
> Thanks!
> Serguei
>
>
> > > >
> > > > This new fix grabs relevant locks for both cases above.
> > > >
> > > > Testing done:
> > > > - com/sun/jdi test set. No regressions + added regression test.
> > > > - com/sun/jdi/InterfaceMethodsTest.java did not fail in 1300
> > > > invocations. Same for com/sun/jdi/InvokeTest.java.
> > > > - I haven't seen any crashes in new OomDebugTest.java either.
> > > >
> > > > Bug: https://bugs.openjdk.java.net/browse/JDK-8153711
> > > > webrev: http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8153711/webrev.01/
> > > >
> > > > Once reviewed, I'd need somebody to sponsor this patch.
> > > >
> > > > Thanks,
> > > > Severin
> > > >
> > >
> >
>
More information about the serviceability-dev
mailing list