On Tue, 2016-04-19 at 19:32 -0700, serguei.spit...@oracle.com wrote:
> On 4/19/16 19:06, serguei.spit...@oracle.com wrote:
> > 
> > On 4/19/16 02:22, serguei.spit...@oracle.com wrote:
> > > 
> > > On 4/19/16 02:16, Severin Gehwolf wrote:
> > > > 
> > > > Hi,
> > > > 
> > > > On Tue, 2016-04-19 at 01:33 -0700, serguei.spit...@oracle.com wrote:
> > > > > 
> > > > > Hi Severin,
> > > > > 
> > > > > Please, find my comments below.
> > > > > 
> > > > > On 4/15/16 13:52, serguei.spit...@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.
> > > I will sponsor the fix for you.
> > Hi Severin,
> > 
> > I postpone a push for this fix.
> > 
> > There are two nsk.jdi test failures (they look like deadlocks):
> >   nsk/jdi/ObjectReference/invokeMethod/invokemethod012 FAIL(TIMEOUT)
> >   nsk/jdi/Scenarios/invokeMethod/popframes001 FAIL(TIMEOUT)

Those seem closed tests, no? At least I don't see those. Any pointers?

> > and one jtreg sun/com/jdi failure (it looks like a deadlock too):
> >   com/sun/jdi/InvokeHangTes.java

This seems one I can work with. On which platform does it fail? I've
run this test > 100 times when I last tested the patch and didn't
observe hangs.

> > I'll double check if these failures are regressions caused by your fix 
> > or not.
> I confirm, the failures above are new regressions introduced by the fix.
> The tests fail consistently with the fix and do not fail without the fix.
> This new fix grabs relevant locks for both cases above.

Thanks for checking!

I'll have another look. Hopefully I can reproduce.

Cheers,
Severin

> > > > > > > > 
> > > > > > > > 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
> > > > > > > > 

Reply via email to