[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: RFR (S) 8210842: Handle JNIGlobalRefLocker.cpp
From:       JC Beyler <jcbeyler () google ! com>
Date:       2018-09-28 20:03:28
Message-ID: CAF9BGBxV+OqyaUv2v0zKy4RGbqoDvkrUzgk5r_kS__yhDcRbjg () mail ! gmail ! com
[Download RAW message or body]

Thanks all for the reviews, I pushed the version webrev.05 and we can
refactor and tweak the ExceptionCheckingJniEnv as we add more methods and
look at more at how it is being used,
Jc

On Fri, Sep 28, 2018 at 10:30 AM Alex Menkov <alexey.menkov@oracle.com>
wrote:

> +1 for webrev.05
> 
> --alex
> 
> On 09/28/2018 04:25, serguei.spitsyn@oracle.com wrote:
> > Hi Jc,
> > 
> > I agree it can be refactored later so I'm Okay with the current webrev.
> > 
> > Thanks,
> > Serguei
> > 
> > On 9/27/18 8:57 PM, JC Beyler wrote:
> > > Hi Serguei,
> > > 
> > > Exactly, I'm taking the lazy approach and just doing the ones I need.
> > > Ideally I will find a better means to wrap around the methods without
> > > having to redefine all of them but I've looked around and nothing
> > > seems really perfect even with heavy utilization of C++ templates.
> > > Perhaps I can use some macro definitions to make the code easier to be
> > > generated but I did not want to go in either direction now, instead
> > > preferring to keep it simple and direct.
> > > 
> > > If you agree, as we add more methods we can always refactor this at
> > > some point if someone (or us) finds a better solution to this but that
> > > is an internal problem to the exception checking class and won't
> > > affect the tests.
> > > 
> > > Does that sound reasonable?
> > > 
> > > Let me know,
> > > Jc
> > > 
> > > On Thu, Sep 27, 2018 at 8:00 PM <serguei.spitsyn@oracle.com
> > > <mailto:serguei.spitsyn@oracle.com>> wrote:
> > > 
> > > Hi Jc,
> > > 
> > > Sorry for being late to the party.
> > > The webrev5 looks good to me.
> > > I don't think you have to try to fix the build system.
> > > Avoiding using unique_ptr is good enough.
> > > 
> > > Do I understand it right that the ExceptionCheckingJniEnv class
> > > is going to enhanced with more JNI functions?
> > > I'm wonder if it can be anyhow generalized to avoid this.
> > > 
> > > Thanks,
> > > Serguei
> > > **
> > > 
> > > On 9/27/18 2:33 PM, JC Beyler wrote:
> > > > Hi all,
> > > > 
> > > > Sorry to come back to this so late in the game, but somehow when
> > > > I synced my hg clone (or the issue was always there and it is a
> > > > flaky build), it seems that something in the build might have
> > > > changed? Basically now it seems that the build is adding flags
> > > > that makes my usage of unique_ptr fail.
> > > > 
> > > > I "think" it is due to the build adding the gnu++98 standard (But
> > > > this has been there for a while it seems so most likely a
> > > > side-effect is it is being now used):
> > > > 
> > > > CXXSTD_CXXFLAG="-std=gnu++98"
> > > > FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$CXXSTD_CXXFLAG
> > > > -Werror],
> > > > IF_FALSE: [CXXSTD_CXXFLAG=""])
> > > > 
> > > > (from:
> > > > 
> https://hg.openjdk.java.net/jdk/jdk/file/dade6dd87bb4/make/autoconf/flags-cflags.m4
> )
> > > > but I'm not sure.
> > > > 
> > > > When I remove that flag, my g++ goes to a more recent standard
> > > > and unique_ptr works.
> > > > 
> > > > So I now have to ask you all:
> > > > 1) Should we try to fix the build system to at least have C++11
> > > > for the C++ tests, then my webrev.04 can stay as is but has to
> > > > wait for that to happen
> > > > 2) Should we push a new version that does not use unique_ptr?
> > > > That solution would look like the following webrev:
> > > > http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.05/
> > > > <http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.05/>
> > > > 
> > > > Sorry for the last minute rug pull,
> > > > Jc
> > > > 
> > > > On Thu, Sep 27, 2018 at 11:32 AM Mikael Vidstedt
> > > > <mikael.vidstedt@oracle.com <mailto:mikael.vidstedt@oracle.com>>
> > > > wrote:
> > > > 
> > > > 
> > > > Very, very nice! Thanks for adding the comment and renaming
> > > > the class! Ship it!
> > > > 
> > > > Cheers,
> > > > Mikael
> > > > 
> > > > 
> > > > > On Sep 27, 2018, at 10:45 AM, JC Beyler <jcbeyler@google.com
> > > > > <mailto:jcbeyler@google.com>> wrote:
> > > > > 
> > > > > Hi Mikael and David,
> > > > > 
> > > > > @David: I thought it was implicit but did not want to
> > > > > presume on this one because my goal is to start propagating
> > > > > this new class in the test base and get the checks to be
> > > > > done implicitly so I was probably being over-cautious
> > > > > @Mikael: done and done, what do you think of the comment
> > > > > here :
> > > > > 
> http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.04/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp.html
> 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.04/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp.html
> 
> > 
> > > > > 
> > > > > For all, the new webrev is here:
> > > > > Webrev:
> > > > > http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.04/
> > > > > <http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.04/>
> > > > > Bug: https://bugs.openjdk.java.net/browse/JDK-8210842
> > > > > 
> > > > > Thanks,
> > > > > Jc
> > > > > 
> > > > > On Thu, Sep 27, 2018 at 6:03 AM David Holmes
> > > > > <david.holmes@oracle.com <mailto:david.holmes@oracle.com>>
> > > > > wrote:
> > > > > 
> > > > > Sorry Jc, I thought my LGTM was implicit. :)
> > > > > 
> > > > > Thanks,
> > > > > David
> > > > > 
> > > > > On 26/09/2018 11:52 PM, JC Beyler wrote:
> > > > > > Ping on this, anybody have time to do a review and
> > > > > give a LGTM? Or David
> > > > > > if you have time and will to provide an explicit LGTM :)
> > > > > > 
> > > > > > Thanks,
> > > > > > Jc
> > > > > > 
> > > > > > On Mon, Sep 24, 2018 at 9:18 AM JC Beyler
> > > > > <jcbeyler@google.com <mailto:jcbeyler@google.com>
> > > > > > <mailto:jcbeyler@google.com
> > > > > <mailto:jcbeyler@google.com>>> wrote:
> > > > > > 
> > > > > > Hi David,
> > > > > > 
> > > > > > Sounds good to me, Alex gave me one LGTM, so it
> > > > > seems I'm waiting
> > > > > > for an explicit LGTM from you or from someone else
> > > > > on this list to
> > > > > > do a review.
> > > > > > 
> > > > > > Thanks again for your help,
> > > > > > Jc
> > > > > > 
> > > > > > On Sun, Sep 23, 2018 at 9:22 AM David Holmes
> > > > > > <david.holmes@oracle.com
> > > > > <mailto:david.holmes@oracle.com>
> > > > > <mailto:david.holmes@oracle.com
> > > > > <mailto:david.holmes@oracle.com>>> wrote:
> > > > > > 
> > > > > > Hi Jc,
> > > > > > 
> > > > > > I don't think it is an issue for this to go
> > > > > ahead. If the static
> > > > > > analysis tool has an issue then we can either
> > > > > find out how to
> > > > > > teach it
> > > > > > about this code structure, or else flag the
> > > > > issues as false
> > > > > > positives.
> > > > > > I'd be relying on one of the serviceability
> > > > > team here to handle
> > > > > > that if
> > > > > > the problem arises.
> > > > > > 
> > > > > > Thanks,
> > > > > > David
> > > > > > 
> > > > > > On 23/09/2018 12:17 PM, JC Beyler wrote:
> > > > > > > Hi David,
> > > > > > > 
> > > > > > > No worries with the time to answer; I
> > > > > appreciate the review!
> > > > > > > 
> > > > > > > That's a fair point. Is it possible to
> > > > > "describe" to the
> > > > > > static analysis
> > > > > > > tool to "trust" calls made in the
> > > > > SafeJNIEnv class?
> > > > > > > 
> > > > > > > Otherwise, do you have any idea on how to
> > > > > go forward? For
> > > > > > what it's
> > > > > > > worth, this current webrev does not try to
> > > > > replace exception
> > > > > > checking
> > > > > > > with the SafeJNIEnv (it actually adds it),
> > > > > so for now the
> > > > > > > question/solution could be delayed. I could
> > > > > continue working
> > > > > > on this in
> > > > > > > the scope of both the nsk/gc/lock/jniref
> > > > > code base and the
> > > > > > NSK_VERIFIER
> > > > > > > macro removal and we can look at how to
> > > > > tackle the cases
> > > > > > where the tests
> > > > > > > are actually calling exception checking (I
> > > > > know my
> > > > > > heapmonitor does for
> > > > > > > example).
> > > > > > > 
> > > > > > > Let me know what you think and thanks for
> > > > > the review,
> > > > > > > Jc
> > > > > > > 
> > > > > > > 
> > > > > > > On Sun, Sep 23, 2018 at 6:48 AM David Holmes
> > > > > > <david.holmes@oracle.com
> > > > > <mailto:david.holmes@oracle.com>
> > > > > <mailto:david.holmes@oracle.com
> > > > > <mailto:david.holmes@oracle.com>>
> > > > > > > <mailto:david.holmes@oracle.com
> > > > > <mailto:david.holmes@oracle.com>
> > > > > > <mailto:david.holmes@oracle.com
> > > > > <mailto:david.holmes@oracle.com>>>> wrote:
> > > > > > > 
> > > > > > > Hi Jc,
> > > > > > > 
> > > > > > > Sorry for the delay on getting back to
> > > > > this but I'm
> > > > > > travelling at the
> > > > > > > moment.
> > > > > > > 
> > > > > > > This looks quite neat. Thanks also to
> > > > > Alex for all the
> > > > > > suggestions.
> > > > > > > 
> > > > > > > My only remaining concern is that
> > > > > static analysis tools
> > > > > > may not like
> > > > > > > this because they may not be able to
> > > > > determine that we
> > > > > > won't make
> > > > > > > subsequent JNI calls when an exception
> > > > > happens in the
> > > > > > first. That's not
> > > > > > > a reason not to do this of course, just
> > > > > flagging that we
> > > > > > may have to do
> > > > > > > something to deal with that problem.
> > > > > > > 
> > > > > > > Thanks,
> > > > > > > David
> > > > > > > 
> > > > > > > On 20/09/2018 11:56 AM, JC Beyler wrote:
> > > > > > > > Hi Alex,
> > > > > > > > 
> > > > > > > > Done here, thanks for the review:
> > > > > > > > 
> > > > > > > > Webrev:
> > > > > > 
> > > > > http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.03/
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/>
> > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/>
> > > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/>
> > > > > > > > 
> > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/>
> > > > > > > > Bug:
> > > > > https://bugs.openjdk.java.net/browse/JDK-8210842
> > > > > > > > 
> > > > > > > > Thanks again!
> > > > > > > > Jc
> > > > > > > > 
> > > > > > > > 
> > > > > > > > On Wed, Sep 19, 2018 at 5:13 PM Alex
> > > > > Menkov
> > > > > > > <alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>>
> > > > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>
> > > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>>>> wrote:
> > > > > > > > 
> > > > > > > > Hi Jc,
> > > > > > > > 
> > > > > > > > Looks good to me.
> > > > > > > > A minor note:
> > > > > > > > - I'd move ErrorHandler typedef
> > > > > to SafeJNIEnv
> > > > > > class to avoid
> > > > > > > global
> > > > > > > > namespece pollution
> > > > > (ErrorHandler is too generic
> > > > > > name).
> > > > > > > > 
> > > > > > > > --alex
> > > > > > > > 
> > > > > > > > On 09/19/2018 15:56, JC Beyler
> > > > > wrote:
> > > > > > > > > Hi Alex,
> > > > > > > > > 
> > > > > > > > > I've updated the webrev to:
> > > > > > > > > Webrev:
> > > > > > > 
> > > > > http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.02/
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/>
> > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/>
> > > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/>
> > > > > > > > 
> > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/>
> > > > > > > > > 
> > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/>
> > > > > > > > > Bug:
> > > > > > https://bugs.openjdk.java.net/browse/JDK-8210842
> > > > > > > > > 
> > > > > > > > > That webrev has the code that
> > > > > is shown here in
> > > > > > snippets.
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > Thanks for the reviews, I've
> > > > > relatively
> > > > > > followed your reviews
> > > > > > > > except for
> > > > > > > > > one detail due to me wanting
> > > > > to handle the
> > > > > > NSK_JNI_VERIFY
> > > > > > > macros via
> > > > > > > > > this system as well later
> > > > > down the road. For an
> > > > > > example:
> > > > > > > > > 
> > > > > > > > > We currently have in the code:
> > > > > > > > > if ( ! NSK_JNI_VERIFY(pEnv,
> > > > > (mhClass =
> > > > > > > NSK_CPP_STUB2(GetObjectClass,
> > > > > > > > > pEnv, mhToCall)) != NULL) )
> > > > > > > > > 
> > > > > > > > > 1) The NSK_CPP_STUB2 is
> > > > > trivially removed with
> > > > > > a refactor
> > > > > > > > (JDK-8210728)
> > > > > > > > > 
> > > > > > 
> > > > > <https://bugs.openjdk.java.net/browse/JDK-8210728> to:
> > > > > > > > > if ( ! NSK_JNI_VERIFY(pEnv,
> > > > > (mhClass =
> > > > > > > pEnv->GetObjectClass(pEnv,
> > > > > > > > > mhToCall)) != NULL) )
> > > > > > > > > 
> > > > > > > > > 2) Then the NSK_JNI_VERIFY,
> > > > > I'd like to remove
> > > > > > it to and it
> > > > > > > > becomes via
> > > > > > > > > this wrapping of JNIEnv:
> > > > > > > > > if ( ! (mhClass =
> > > > > pEnv->GetObjectClass(pEnv,
> > > > > > mhToCall)) )
> > > > > > > > > 
> > > > > > > > > 3) Then, via removing the
> > > > > assignment, we'd
> > > > > > arrive to a:
> > > > > > > > > mhClass =
> > > > > pEnv->GetObjectClass(pEnv, mhToCall));
> > > > > > > > > if (!mhClass)
> > > > > > > > > 
> > > > > > > > > Without any loss of checking
> > > > > for failures, etc.
> > > > > > > > > 
> > > > > > > > > So that is my motivation for
> > > > > most of this work
> > > > > > with a concrete
> > > > > > > > example
> > > > > > > > > (hopefully it helps drive
> > > > > this conversation).
> > > > > > > > > 
> > > > > > > > > I inlined my answers here,
> > > > > let me know what you
> > > > > > think.
> > > > > > > > > 
> > > > > > > > > On Wed, Sep 19, 2018 at 2:30
> > > > > PM Alex Menkov
> > > > > > > > <alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>>
> > > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>>>
> > > > > > > > > 
> > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>
> > > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>>
> > > > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>
> > > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>
> > > > > > <mailto:alexey.menkov@oracle.com
> > > > > <mailto:alexey.menkov@oracle.com>>>>>> wrote:
> > > > > > > > > 
> > > > > > > > > Hi Jc,
> > > > > > > > > 
> > > > > > > > > Updated tests looks good.
> > > > > > > > > Some notes about
> implementation.
> > > > > > > > > 
> > > > > > > > > - FatalOnException
> > > > > implements both
> > > > > > verification and error
> > > > > > > > handling
> > > > > > > > > It would be better to
> > > > > separate them (and
> > > > > > this makes
> > > > > > > easy to
> > > > > > > > implement
> > > > > > > > > error handling different from
> > > > > > JNIEnv::FatalError).
> > > > > > > > > The simplest way is to
> > > > > define error handler as
> > > > > > > > > class SafeJNIEnv {
> > > > > > > > > public:
> > > > > > > > > typedef void
> > > > > (*ErrorHandler)(JNIEnv
> > > > > > *env, const
> > > > > > > char*
> > > > > > > > errorMsg);
> > > > > > > > > // error handler which
> > > > > terminates jvm
> > > > > > by using
> > > > > > > FatalError()
> > > > > > > > > static void
> > > > > FatalError(JNIEnv *env,
> > > > > > const char
> > > > > > > *errrorMsg);
> > > > > > > > > 
> > > > > > > > > SafeJNIEnv(JNIEnv*
> > > > > jni_env, ErrorHandler
> > > > > > > errorHandler =
> > > > > > > > > FatalError);
> > > > > > > > > (SafeJNIEnv methods should
> > > > > create
> > > > > > FatalOnException objects
> > > > > > > > passing
> > > > > > > > > errorHandler)
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > Agreed, I tried to keep the
> > > > > code simple. The
> > > > > > concepts you
> > > > > > > talk about
> > > > > > > > > here are generally what I
> > > > > reserve for when I
> > > > > > need it (ie
> > > > > > > > extensions and
> > > > > > > > > handling new cases). But a
> > > > > lot are going to be
> > > > > > needed soon
> > > > > > > so I
> > > > > > > > think it
> > > > > > > > > is a good time to iron the
> > > > > code out now on this
> > > > > > "simple"
> > > > > > > webrev.
> > > > > > > > > 
> > > > > > > > > So done for this.
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > - FatalOnException is used
> > > > > in SafeJNIEnv
> > > > > > methods as
> > > > > > > > > FatalOnException
> > > > > marker(this, "msg");
> > > > > > > > > ret = <JNI call>
> > > > > > > > > 
> > > > > (optional)marker.check_for_null(ret);
> > > > > > > > > return ret;
> > > > > > > > > But actually I'd call it
> > > > > something like
> > > > > > > JNICallResultVerifier and
> > > > > > > > > create
> > > > > > > > > the object after JNI call.
> like
> > > > > > > > > ret = <JNI call>
> > > > > > > > > 
> > > > > JNICallResultVerifier(this, "msg")
> > > > > > > > > (optional).notNull(ret);
> > > > > > > > > return ret;
> > > > > > > > > or even (if you like such
> > > > > syntax sugar) you
> > > > > > can define
> > > > > > > > > template<typename T>
> > > > > > > > > T resultNotNull(T result)
> {
> > > > > > > > > notNull(result);
> > > > > > > > > return result;
> > > > > > > > > }
> > > > > > > > > and do
> > > > > > > > > ret = <JNI call>
> > > > > > > > > return
> > > > > JNICallResultVerifier(this,
> > > > > > > "msg").resultNotNull(ret);
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > So I renamed FatalOnException
> > > > > to now being
> > > > > > JNIVerifier.
> > > > > > > > > 
> > > > > > > > > Though I like it, I don't
> > > > > think we can do it,
> > > > > > except if we
> > > > > > > do it
> > > > > > > > > slightly differently:
> > > > > > > > > I'm trying to solve two
> > > > > problems with one stone:
> > > > > > > > > - How to check for returns
> > > > > of JNI calls in
> > > > > > the way that is
> > > > > > > > done here
> > > > > > > > > - How to remove
> > > > > NSK_JNI_VERIFY* (from
> > > > > > > nsk/share/jni/jni_tools)
> > > > > > > > > 
> > > > > > > > > However, the NSK_JNI_VERIFY
> > > > > need to start a
> > > > > > tracing system
> > > > > > > before
> > > > > > > > the
> > > > > > > > > call to JNI, so it won't work
> > > > > this way. (Side
> > > > > > question
> > > > > > > would be
> > > > > > > > do we
> > > > > > > > > still care about the tracing
> > > > > in NSK_JNI_VERIFY,
> > > > > > if we
> > > > > > > don't then
> > > > > > > > your
> > > > > > > > > solution works well in most
> > > > > situations).
> > > > > > > > > 
> > > > > > > > > My vision or intuition is
> > > > > that we would throw a
> > > > > > template
> > > > > > > at some
> > > > > > > > point
> > > > > > > > > on SafeJNIEnv to handle both
> > > > > cases and have
> > > > > > JNIVerifier
> > > > > > > become a
> > > > > > > > > specialization in certain
> > > > > cases and something
> > > > > > different
> > > > > > > for the
> > > > > > > > > NSK_JNI_VERIFY case (or have
> > > > > a different
> > > > > > constructor to enable
> > > > > > > > tracing).
> > > > > > > > > But for now, I offer the
> > > > > implementation that does:
> > > > > > > > > 
> > > > > > > > > jclass
> > > > > SafeJNIEnv::GetObjectClass(jobject obj) {
> > > > > > > > > JNIVerifier<jclass>
> marker(this,
> > > > > > "GetObjectClass");
> > > > > > > > > return
> > > > > > marker.ResultNotNull(_jni_env->GetObjectClass(obj));
> > > > > > > > > }
> > > > > > > > > 
> > > > > > > > > and:
> > > > > > > > > 
> > > > > > > > > void
> > > > > SafeJNIEnv::SetObjectField(jobject obj,
> > > > > > jfieldID
> > > > > > > field, jobject
> > > > > > > > > value) {
> > > > > > > > > JNIVerifier<> marker(this,
> > > > > "SetObjectField");
> > > > > > > > > _jni_env->SetObjectField(obj,
> > > > > field, value);
> > > > > > > > > }
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > - you added #include
> > > > > <memory> in the test
> > > > > > (and you have to
> > > > > > > > add it to
> > > > > > > > > every test).
> > > > > > > > > It would be simpler to add
> > > > > the include to
> > > > > > > SafeJNIEnv.hpp and
> > > > > > > > define
> > > > > > > > > typedef
> > > > > std::unique_ptr<SafeJNIEnv>
> > > > > > SafeJNIEnvPtr;
> > > > > > > > > Then each in the test methods:
> > > > > > > > > SafeJNIEnvPtr env(new
> > > > > SafeJNIEnv(jni_env));
> > > > > > > > > or you can add
> > > > > > > > > static
> SafeJNIEnv::SafeJNIEnvPtr
> > > > > > wrap(JNIEnv* jni_env,
> > > > > > > > ErrorHandler
> > > > > > > > > errorHandler = fatalError)
> > > > > > > > > and get
> > > > > > > > > SafeJNIEnvPtr env =
> > > > > > SafeJNIEnv::wrap(jni_env);
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > Done, I like that, even less
> > > > > code change to
> > > > > > tests then.
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > - it would be better to wrap
> > > > > internal classes
> > > > > > > > (FatalOnException) into
> > > > > > > > > unnamed namespace - this
> > > > > helps to avoid
> > > > > > conflicts with
> > > > > > > other
> > > > > > > > classes)
> > > > > > > > > 
> > > > > > > > > -
> > > > > FatalOnException::check_for_null(void* ptr)
> > > > > > > > > should be
> > > > > > > > > 
> > > > > FatalOnException::check_for_null(const
> > > > > > void* ptr)
> > > > > > > > > And calling the method you
> > > > > don't need
> > > > > > reinterpret_cast
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > Also done, it got renamed to
> > > > > ResultNotNull, is
> > > > > > using a
> > > > > > > template
> > > > > > > > now, but
> > > > > > > > > agreed, that worked.
> > > > > > > > > Thanks again for the review,
> > > > > > > > > Jc
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > --alex
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > On 09/18/2018 11:07, JC
> > > > > Beyler wrote:
> > > > > > > > > > Hi David,
> > > > > > > > > > 
> > > > > > > > > > Thanks for the quick
> > > > > review and
> > > > > > thoughts. I have
> > > > > > > now a new
> > > > > > > > > version here
> > > > > > > > > > that addresses your
> comments:
> > > > > > > > > > 
> > > > > > > > > > Webrev:
> > > > > > > > 
> > > > > > 
> > > > > http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.01/
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/>
> > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/>
> > > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/>
> > > > > > > > 
> > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/>
> > > > > > > > > 
> > > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/>
> > > > > > > > > > 
> > > > > > > 
> > > > > <
> http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/>
> > > > > > > > > > 
> > > > > > 
> > > > > Bug:https://bugs.openjdk.java.net/browse/JDK-8210842
> > > > > > > > > > 
> > > > > > > > > > I've also inlined my
> > > > > answers/comments.
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > > I've slowly
> > > > > started working on
> > > > > > JDK-8191519
> > > > > > > > > > > 
> > > > > > > 
> > > > > <https://bugs.openjdk.java.net/browse/JDK-8191519>.
> > > > > > > > > However before
> > > > > > > > > > > starting to really
> > > > > refactor all
> > > > > > the tests, I
> > > > > > > > thought I'd
> > > > > > > > > get a few
> > > > > > > > > > > opinions. I am
> > > > > working on
> > > > > > internalizing the
> > > > > > > error
> > > > > > > > handling
> > > > > > > > > of JNI
> > > > > > > > > > calls
> > > > > > > > > > > via a SafeJNIEnv
> > > > > class that
> > > > > > redefines all
> > > > > > > the JNI
> > > > > > > 



-- 

Thanks,
Jc


[Attachment #3 (text/html)]

<div dir="ltr">Thanks all for the reviews, I pushed the version webrev.05 and we can \
refactor and tweak the ExceptionCheckingJniEnv as we add more methods and look at \
more at how it is being used,<div>Jc</div></div><br><div class="gmail_quote"><div \
dir="ltr">On Fri, Sep 28, 2018 at 10:30 AM Alex Menkov &lt;<a \
href="mailto:alexey.menkov@oracle.com">alexey.menkov@oracle.com</a>&gt; \
wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 \
.8ex;border-left:1px #ccc solid;padding-left:1ex">+1 for webrev.05<br> <br>
--alex<br>
<br>
On 09/28/2018 04:25, <a href="mailto:serguei.spitsyn@oracle.com" \
target="_blank">serguei.spitsyn@oracle.com</a> wrote:<br> &gt; Hi Jc,<br>
&gt; <br>
&gt; I agree it can be refactored later so I&#39;m Okay with the current webrev.<br>
&gt; <br>
&gt; Thanks,<br>
&gt; Serguei<br>
&gt; <br>
&gt; On 9/27/18 8:57 PM, JC Beyler wrote:<br>
&gt;&gt; Hi Serguei,<br>
&gt;&gt;<br>
&gt;&gt; Exactly, I&#39;m taking the lazy approach and just doing the ones I need. \
<br> &gt;&gt; Ideally I will find a better means to wrap around the methods without \
<br> &gt;&gt; having to redefine all of them but I&#39;ve looked around and nothing \
<br> &gt;&gt; seems really perfect even with heavy utilization of C++ templates. <br>
&gt;&gt; Perhaps I can use some macro definitions to make the code easier to be <br>
&gt;&gt; generated but I did not want to go in either direction now, instead <br>
&gt;&gt; preferring to keep it simple and direct.<br>
&gt;&gt;<br>
&gt;&gt; If you agree, as we add more methods we can always refactor this at <br>
&gt;&gt; some point if someone (or us) finds a better solution to this but that <br>
&gt;&gt; is an internal problem to the exception checking class and won&#39;t <br>
&gt;&gt; affect the tests.<br>
&gt;&gt;<br>
&gt;&gt; Does that sound reasonable?<br>
&gt;&gt;<br>
&gt;&gt; Let me know,<br>
&gt;&gt; Jc<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Sep 27, 2018 at 8:00 PM &lt;<a \
href="mailto:serguei.spitsyn@oracle.com" \
target="_blank">serguei.spitsyn@oracle.com</a> <br> &gt;&gt; &lt;mailto:<a \
href="mailto:serguei.spitsyn@oracle.com" \
target="_blank">serguei.spitsyn@oracle.com</a>&gt;&gt; wrote:<br> &gt;&gt;<br>
&gt;&gt;     Hi Jc,<br>
&gt;&gt;<br>
&gt;&gt;     Sorry for being late to the party.<br>
&gt;&gt;     The webrev5 looks good to me.<br>
&gt;&gt;     I don&#39;t think you have to try to fix the build system.<br>
&gt;&gt;     Avoiding using unique_ptr is good enough.<br>
&gt;&gt;<br>
&gt;&gt;     Do I understand it right that the ExceptionCheckingJniEnv class<br>
&gt;&gt;     is going to enhanced with more JNI functions?<br>
&gt;&gt;     I&#39;m wonder if it can be anyhow generalized to avoid this.<br>
&gt;&gt;<br>
&gt;&gt;     Thanks,<br>
&gt;&gt;     Serguei<br>
&gt;&gt;     **<br>
&gt;&gt;<br>
&gt;&gt;     On 9/27/18 2:33 PM, JC Beyler wrote:<br>
&gt;&gt;&gt;     Hi all,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     Sorry to come back to this so late in the game, but somehow when<br>
&gt;&gt;&gt;     I synced my hg clone (or the issue was always there and it is a<br>
&gt;&gt;&gt;     flaky build), it seems that something in the build might have<br>
&gt;&gt;&gt;     changed? Basically now it seems that the build is adding flags<br>
&gt;&gt;&gt;     that makes my usage of unique_ptr fail.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     I &quot;think&quot; it is due to the build adding the gnu++98 \
standard (But<br> &gt;&gt;&gt;     this has been there for a while it seems so most \
likely a<br> &gt;&gt;&gt;     side-effect is it is being now used):<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;         CXXSTD_CXXFLAG=&quot;-std=gnu++98&quot;<br>
&gt;&gt;&gt;     FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$CXXSTD_CXXFLAG<br>
&gt;&gt;&gt;     -Werror],<br>
&gt;&gt;&gt;     IF_FALSE: [CXXSTD_CXXFLAG=&quot;&quot;])<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     (from:<br>
&gt;&gt;&gt;     <a href="https://hg.openjdk.java.net/jdk/jdk/file/dade6dd87bb4/make/autoconf/flags-cflags.m4" \
rel="noreferrer" target="_blank">https://hg.openjdk.java.net/jdk/jdk/file/dade6dd87bb4/make/autoconf/flags-cflags.m4</a>)<br>
 &gt;&gt;&gt;     but I&#39;m not sure.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     When I remove that flag, my g++ goes to a more recent standard<br>
&gt;&gt;&gt;     and unique_ptr works.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     So I now have to ask you all:<br>
&gt;&gt;&gt;       1) Should we try to fix the build system to at least have \
C++11<br> &gt;&gt;&gt;     for the C++ tests, then my webrev.04 can stay as is but \
has to<br> &gt;&gt;&gt;     wait for that to happen<br>
&gt;&gt;&gt;       2) Should we push a new version that does not use unique_ptr?<br>
&gt;&gt;&gt;     That solution would look like the following webrev:<br>
&gt;&gt;&gt;     <a href="http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.05/" \
rel="noreferrer" target="_blank">http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.05/</a><br>
 &gt;&gt;&gt;     &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.05/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.05/</a>&gt;<br> \
&gt;&gt;&gt;<br> &gt;&gt;&gt;     Sorry for the last minute rug pull,<br>
&gt;&gt;&gt;     Jc<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     On Thu, Sep 27, 2018 at 11:32 AM Mikael Vidstedt<br>
&gt;&gt;&gt;     &lt;<a href="mailto:mikael.vidstedt@oracle.com" \
target="_blank">mikael.vidstedt@oracle.com</a> &lt;mailto:<a \
href="mailto:mikael.vidstedt@oracle.com" \
target="_blank">mikael.vidstedt@oracle.com</a>&gt;&gt;<br> &gt;&gt;&gt;     \
wrote:<br> &gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;         Very, very nice! Thanks for adding the comment and renaming<br>
&gt;&gt;&gt;         the class! Ship it!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;         Cheers,<br>
&gt;&gt;&gt;         Mikael<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;         On Sep 27, 2018, at 10:45 AM, JC Beyler &lt;<a \
href="mailto:jcbeyler@google.com" target="_blank">jcbeyler@google.com</a><br> \
&gt;&gt;&gt;&gt;         &lt;mailto:<a href="mailto:jcbeyler@google.com" \
target="_blank">jcbeyler@google.com</a>&gt;&gt; wrote:<br> &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;         Hi Mikael and David,<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;         @David: I thought it was implicit but did not want to<br>
&gt;&gt;&gt;&gt;         presume on this one because my goal is to start \
propagating<br> &gt;&gt;&gt;&gt;         this new class in the test base and get the \
checks to be<br> &gt;&gt;&gt;&gt;         done implicitly so I was probably being \
over-cautious<br> &gt;&gt;&gt;&gt;         @Mikael: done and done, what do you think \
of the comment<br> &gt;&gt;&gt;&gt;         here :<br>
&gt;&gt;&gt;&gt;         <a \
href="http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.04/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp.html" \
rel="noreferrer" target="_blank">http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.0 \
4/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp.html</a><br>
 &gt;&gt;&gt;&gt;         &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.04/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp.html" \
rel="noreferrer" target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev \
.04/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp.html</a>&gt;<br>
 &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;         For all, the new webrev is here:<br>
&gt;&gt;&gt;&gt;         Webrev:<br>
&gt;&gt;&gt;&gt;         <a \
href="http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.04/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.04/</a><br> \
&gt;&gt;&gt;&gt;         &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.04/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.04/</a>&gt;<br> \
&gt;&gt;&gt;&gt;         Bug: <a \
href="https://bugs.openjdk.java.net/browse/JDK-8210842" rel="noreferrer" \
target="_blank">https://bugs.openjdk.java.net/browse/JDK-8210842</a><br> \
&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;         Thanks,<br>
&gt;&gt;&gt;&gt;         Jc<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;         On Thu, Sep 27, 2018 at 6:03 AM David Holmes<br>
&gt;&gt;&gt;&gt;         &lt;<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a> &lt;mailto:<a \
href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a>&gt;&gt;<br> &gt;&gt;&gt;&gt;         \
wrote:<br> &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;             Sorry Jc, I thought my LGTM was implicit. :)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;             Thanks,<br>
&gt;&gt;&gt;&gt;             David<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;             On 26/09/2018 11:52 PM, JC Beyler wrote:<br>
&gt;&gt;&gt;&gt;             &gt; Ping on this, anybody have time to do a review \
and<br> &gt;&gt;&gt;&gt;             give a LGTM? Or David<br>
&gt;&gt;&gt;&gt;             &gt; if you have time and will to provide an explicit \
LGTM :)<br> &gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             &gt; Thanks,<br>
&gt;&gt;&gt;&gt;             &gt; Jc<br>
&gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             &gt; On Mon, Sep 24, 2018 at 9:18 AM JC Beyler<br>
&gt;&gt;&gt;&gt;             &lt;<a href="mailto:jcbeyler@google.com" \
target="_blank">jcbeyler@google.com</a> &lt;mailto:<a \
href="mailto:jcbeyler@google.com" target="_blank">jcbeyler@google.com</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt; &lt;mailto:<a href="mailto:jcbeyler@google.com" \
target="_blank">jcbeyler@google.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:jcbeyler@google.com" \
target="_blank">jcbeyler@google.com</a>&gt;&gt;&gt; wrote:<br> &gt;&gt;&gt;&gt;       \
&gt;<br> &gt;&gt;&gt;&gt;             &gt;     Hi David,<br>
&gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             &gt;     Sounds good to me, Alex gave me one LGTM, so \
it<br> &gt;&gt;&gt;&gt;             seems I&#39;m waiting<br>
&gt;&gt;&gt;&gt;             &gt;     for an explicit LGTM from you or from someone \
else<br> &gt;&gt;&gt;&gt;             on this list to<br>
&gt;&gt;&gt;&gt;             &gt;     do a review.<br>
&gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             &gt;     Thanks again for your help,<br>
&gt;&gt;&gt;&gt;             &gt;     Jc<br>
&gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             &gt;     On Sun, Sep 23, 2018 at 9:22 AM David \
Holmes<br> &gt;&gt;&gt;&gt;             &gt;     &lt;<a \
href="mailto:david.holmes@oracle.com" target="_blank">david.holmes@oracle.com</a><br> \
&gt;&gt;&gt;&gt;             &lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a>&gt;&gt;&gt; wrote:<br> &gt;&gt;&gt;&gt;   \
&gt;<br> &gt;&gt;&gt;&gt;             &gt;         Hi Jc,<br>
&gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             &gt;         I don&#39;t think it is an issue for this \
to go<br> &gt;&gt;&gt;&gt;             ahead. If the static<br>
&gt;&gt;&gt;&gt;             &gt;         analysis tool has an issue then we can \
either<br> &gt;&gt;&gt;&gt;             find out how to<br>
&gt;&gt;&gt;&gt;             &gt;         teach it<br>
&gt;&gt;&gt;&gt;             &gt;         about this code structure, or else flag \
the<br> &gt;&gt;&gt;&gt;             issues as false<br>
&gt;&gt;&gt;&gt;             &gt;         positives.<br>
&gt;&gt;&gt;&gt;             &gt;         I&#39;d be relying on one of the \
serviceability<br> &gt;&gt;&gt;&gt;             team here to handle<br>
&gt;&gt;&gt;&gt;             &gt;         that if<br>
&gt;&gt;&gt;&gt;             &gt;         the problem arises.<br>
&gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             &gt;         Thanks,<br>
&gt;&gt;&gt;&gt;             &gt;         David<br>
&gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             &gt;         On 23/09/2018 12:17 PM, JC Beyler \
wrote:<br> &gt;&gt;&gt;&gt;             &gt;          &gt; Hi David,<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; No worries with the time to answer; \
I<br> &gt;&gt;&gt;&gt;             appreciate the review!<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; That&#39;s a fair point. Is it \
possible to<br> &gt;&gt;&gt;&gt;             &quot;describe&quot; to the<br>
&gt;&gt;&gt;&gt;             &gt;         static analysis<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; tool to &quot;trust&quot; calls made \
in the<br> &gt;&gt;&gt;&gt;             SafeJNIEnv class?<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; Otherwise, do you have any idea on \
how to<br> &gt;&gt;&gt;&gt;             go forward? For<br>
&gt;&gt;&gt;&gt;             &gt;         what it&#39;s<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; worth, this current webrev does not \
try to<br> &gt;&gt;&gt;&gt;             replace exception<br>
&gt;&gt;&gt;&gt;             &gt;         checking<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; with the SafeJNIEnv (it actually adds \
it),<br> &gt;&gt;&gt;&gt;             so for now the<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; question/solution could be delayed. I \
could<br> &gt;&gt;&gt;&gt;             continue working<br>
&gt;&gt;&gt;&gt;             &gt;         on this in<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; the scope of both the \
nsk/gc/lock/jniref<br> &gt;&gt;&gt;&gt;             code base and the<br>
&gt;&gt;&gt;&gt;             &gt;         NSK_VERIFIER<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; macro removal and we can look at how \
to<br> &gt;&gt;&gt;&gt;             tackle the cases<br>
&gt;&gt;&gt;&gt;             &gt;         where the tests<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; are actually calling exception \
checking (I<br> &gt;&gt;&gt;&gt;             know my<br>
&gt;&gt;&gt;&gt;             &gt;         heapmonitor does for<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; example).<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; Let me know what you think and thanks \
for<br> &gt;&gt;&gt;&gt;             the review,<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; Jc<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt; On Sun, Sep 23, 2018 at 6:48 AM David \
Holmes<br> &gt;&gt;&gt;&gt;             &gt;         &lt;<a \
href="mailto:david.holmes@oracle.com" target="_blank">david.holmes@oracle.com</a><br> \
&gt;&gt;&gt;&gt;             &lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a>&gt;&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;          &gt; &lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             &gt; \
&lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:david.holmes@oracle.com" \
target="_blank">david.holmes@oracle.com</a>&gt;&gt;&gt;&gt; wrote:<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;<br> &gt;&gt;&gt;&gt;             &gt; \
&gt;     Hi Jc,<br> &gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     Sorry for the delay on getting \
back to<br> &gt;&gt;&gt;&gt;             this but I&#39;m<br>
&gt;&gt;&gt;&gt;             &gt;         travelling at the<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     moment.<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     This looks quite neat. Thanks \
also to<br> &gt;&gt;&gt;&gt;             Alex for all the<br>
&gt;&gt;&gt;&gt;             &gt;         suggestions.<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     My only remaining concern is \
that<br> &gt;&gt;&gt;&gt;             static analysis tools<br>
&gt;&gt;&gt;&gt;             &gt;         may not like<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     this because they may not be able \
to<br> &gt;&gt;&gt;&gt;             determine that we<br>
&gt;&gt;&gt;&gt;             &gt;         won&#39;t make<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     subsequent JNI calls when an \
exception<br> &gt;&gt;&gt;&gt;             happens in the<br>
&gt;&gt;&gt;&gt;             &gt;         first. That&#39;s not<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     a reason not to do this of \
course, just<br> &gt;&gt;&gt;&gt;             flagging that we<br>
&gt;&gt;&gt;&gt;             &gt;         may have to do<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     something to deal with that \
problem.<br> &gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     Thanks,<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     David<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     On 20/09/2018 11:56 AM, JC Beyler \
wrote:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt; Hi Alex,<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt; Done here, thanks for the \
review:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt; Webrev:<br>
&gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             <a \
href="http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.03/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.03/</a><br> \
&gt;&gt;&gt;&gt;             &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;       <br> &gt;&gt;&gt;&gt;              &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;   <br> &gt;&gt;&gt;&gt;              \
&lt;<a href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/" \
rel="noreferrer" target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/</a>&gt;<br>
 &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;       <br>
&gt;&gt;&gt;&gt;              &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.03/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt; Bug:<br> &gt;&gt;&gt;&gt;   \
<a href="https://bugs.openjdk.java.net/browse/JDK-8210842" rel="noreferrer" \
target="_blank">https://bugs.openjdk.java.net/browse/JDK-8210842</a><br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br> &gt;&gt;&gt;&gt;        \
&gt;          &gt;      &gt; Thanks again!<br> &gt;&gt;&gt;&gt;             &gt;      \
&gt;      &gt; Jc<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt; On Wed, Sep 19, 2018 at \
5:13 PM Alex<br> &gt;&gt;&gt;&gt;             Menkov<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     &lt;<a \
href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;         \
&gt;          &gt;      &gt; &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;          &gt;     &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;&gt;&gt;&gt; wrote:<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br> &gt;&gt;&gt;&gt;        \
&gt;          &gt;      &gt;     Hi Jc,<br> &gt;&gt;&gt;&gt;             &gt;         \
&gt;      &gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     \
Looks good to me.<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     A \
minor note:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     - \
I&#39;d move ErrorHandler typedef<br> &gt;&gt;&gt;&gt;             to SafeJNIEnv<br>
&gt;&gt;&gt;&gt;             &gt;         class to avoid<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     global<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     namespece pollution<br>
&gt;&gt;&gt;&gt;             (ErrorHandler is too generic<br>
&gt;&gt;&gt;&gt;             &gt;         name).<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     --alex<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     On 09/19/2018 15:56, JC \
Beyler<br> &gt;&gt;&gt;&gt;             wrote:<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; Hi Alex,<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; I&#39;ve updated \
the webrev to:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt; Webrev:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;<br>
&gt;&gt;&gt;&gt;             <a \
href="http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.02/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.02/</a><br> \
&gt;&gt;&gt;&gt;             &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;       <br> &gt;&gt;&gt;&gt;              &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;   <br> &gt;&gt;&gt;&gt;              \
&lt;<a href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/" \
rel="noreferrer" target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/</a>&gt;<br>
 &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;         <br>
&gt;&gt;&gt;&gt;              &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br> \
&gt;&gt;&gt;&gt;             &gt;       <br> &gt;&gt;&gt;&gt;              &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.02/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; Bug:<br> \
&gt;&gt;&gt;&gt;             &gt; <a \
href="https://bugs.openjdk.java.net/browse/JDK-8210842" rel="noreferrer" \
target="_blank">https://bugs.openjdk.java.net/browse/JDK-8210842</a><br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; That webrev has \
the code that<br> &gt;&gt;&gt;&gt;             is shown here in<br>
&gt;&gt;&gt;&gt;             &gt;         snippets.<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; Thanks for the \
reviews, I&#39;ve<br> &gt;&gt;&gt;&gt;             relatively<br>
&gt;&gt;&gt;&gt;             &gt;         followed your reviews<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     except for<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; one detail due to \
me wanting<br> &gt;&gt;&gt;&gt;             to handle the<br>
&gt;&gt;&gt;&gt;             &gt;         NSK_JNI_VERIFY<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     macros via<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; this system as \
well later<br> &gt;&gt;&gt;&gt;             down the road. For an<br>
&gt;&gt;&gt;&gt;             &gt;         example:<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; We currently have \
in the code:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; \
if ( ! NSK_JNI_VERIFY(pEnv,<br> &gt;&gt;&gt;&gt;             (mhClass =<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;  NSK_CPP_STUB2(GetObjectClass,<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; pEnv, mhToCall)) \
!= NULL) )<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; 1) The \
NSK_CPP_STUB2 is<br> &gt;&gt;&gt;&gt;             trivially removed with<br>
&gt;&gt;&gt;&gt;             &gt;         a refactor<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;  (JDK-8210728)<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;       <br>
&gt;&gt;&gt;&gt;              &lt;<a \
href="https://bugs.openjdk.java.net/browse/JDK-8210728" rel="noreferrer" \
target="_blank">https://bugs.openjdk.java.net/browse/JDK-8210728</a>&gt; to:<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; if ( ! \
NSK_JNI_VERIFY(pEnv,<br> &gt;&gt;&gt;&gt;             (mhClass =<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;  pEnv-&gt;GetObjectClass(pEnv,<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; mhToCall)) != \
NULL) )<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; 2) Then the \
NSK_JNI_VERIFY,<br> &gt;&gt;&gt;&gt;             I&#39;d like to remove<br>
&gt;&gt;&gt;&gt;             &gt;         it to and it<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     becomes via<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; this wrapping of \
JNIEnv:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; if ( \
! (mhClass =<br> &gt;&gt;&gt;&gt;             pEnv-&gt;GetObjectClass(pEnv,<br>
&gt;&gt;&gt;&gt;             &gt;         mhToCall)) )<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; 3) Then, via \
removing the<br> &gt;&gt;&gt;&gt;             assignment, we&#39;d<br>
&gt;&gt;&gt;&gt;             &gt;         arrive to a:<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; mhClass =<br>
&gt;&gt;&gt;&gt;             pEnv-&gt;GetObjectClass(pEnv, mhToCall));<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; if (!mhClass)<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; Without any loss \
of checking<br> &gt;&gt;&gt;&gt;             for failures, etc.<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; So that is my \
motivation for<br> &gt;&gt;&gt;&gt;             most of this work<br>
&gt;&gt;&gt;&gt;             &gt;         with a concrete<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     example<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; (hopefully it \
helps drive<br> &gt;&gt;&gt;&gt;             this conversation).<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; I inlined my \
answers here,<br> &gt;&gt;&gt;&gt;             let me know what you<br>
&gt;&gt;&gt;&gt;             &gt;         think.<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; On Wed, Sep 19, \
2018 at 2:30<br> &gt;&gt;&gt;&gt;             PM Alex Menkov<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     &lt;<a \
href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;         \
&gt;          &gt;     &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;     \
&gt;          &gt;      &gt;      &gt;<br> &gt;&gt;&gt;&gt;             &lt;mailto:<a \
href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;          &gt;     &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;&gt;<br> &gt;&gt;&gt;&gt;         \
&gt;          &gt;      &gt;  &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;          &gt;     &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;<br> &gt;&gt;&gt;&gt;             \
&gt;         &lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a><br> &gt;&gt;&gt;&gt;             \
&lt;mailto:<a href="mailto:alexey.menkov@oracle.com" \
target="_blank">alexey.menkov@oracle.com</a>&gt;&gt;&gt;&gt;&gt;&gt; wrote:<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  Hi Jc,<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  Updated tests \
looks good.<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  \
Some notes about implementation.<br> &gt;&gt;&gt;&gt;             &gt;          &gt;  \
&gt;      &gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt;  - FatalOnException<br> &gt;&gt;&gt;&gt;             implements both<br>
&gt;&gt;&gt;&gt;             &gt;         verification and error<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     handling<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  It would be \
better to<br> &gt;&gt;&gt;&gt;             separate them (and<br>
&gt;&gt;&gt;&gt;             &gt;         this makes<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     easy to<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     implement<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  error handling \
different from<br> &gt;&gt;&gt;&gt;             &gt;         JNIEnv::FatalError).<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  The simplest way \
is to<br> &gt;&gt;&gt;&gt;             define error handler as<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  class SafeJNIEnv \
{<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  \
public:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;       \
typedef void<br> &gt;&gt;&gt;&gt;             (*ErrorHandler)(JNIEnv<br>
&gt;&gt;&gt;&gt;             &gt;         *env, const<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     char*<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;  errorMsg);<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;        // error \
handler which<br> &gt;&gt;&gt;&gt;             terminates jvm<br>
&gt;&gt;&gt;&gt;             &gt;         by using<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     FatalError()<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;        static \
void<br> &gt;&gt;&gt;&gt;             FatalError(JNIEnv *env,<br>
&gt;&gt;&gt;&gt;             &gt;         const char<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     *errrorMsg);<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;        \
SafeJNIEnv(JNIEnv*<br> &gt;&gt;&gt;&gt;             jni_env, ErrorHandler<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     errorHandler =<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  FatalError);<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  (SafeJNIEnv \
methods should<br> &gt;&gt;&gt;&gt;             create<br>
&gt;&gt;&gt;&gt;             &gt;         FatalOnException objects<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     passing<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  \
errorHandler)<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; Agreed, I tried \
to keep the<br> &gt;&gt;&gt;&gt;             code simple. The<br>
&gt;&gt;&gt;&gt;             &gt;         concepts you<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     talk about<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; here are \
generally what I<br> &gt;&gt;&gt;&gt;             reserve for when I<br>
&gt;&gt;&gt;&gt;             &gt;         need it (ie<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;  extensions and<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; handling new \
cases). But a<br> &gt;&gt;&gt;&gt;             lot are going to be<br>
&gt;&gt;&gt;&gt;             &gt;         needed soon<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     so I<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     think it<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; is a good time to \
iron the<br> &gt;&gt;&gt;&gt;             code out now on this<br>
&gt;&gt;&gt;&gt;             &gt;         &quot;simple&quot;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     webrev.<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; So done for \
this.<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  - \
FatalOnException is used<br> &gt;&gt;&gt;&gt;             in SafeJNIEnv<br>
&gt;&gt;&gt;&gt;             &gt;         methods as<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;      \
FatalOnException<br> &gt;&gt;&gt;&gt;             marker(this, &quot;msg&quot;);<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;      ret = \
&lt;JNI call&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt;    <br> &gt;&gt;&gt;&gt;              (optional)marker.check_for_null(ret);<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;      return \
ret;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  But \
actually I&#39;d call it<br> &gt;&gt;&gt;&gt;             something like<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;  JNICallResultVerifier and<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  create<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  the object after \
JNI call. like<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt;      ret = &lt;JNI call&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;  \
&gt;      &gt;    <br> &gt;&gt;&gt;&gt;              JNICallResultVerifier(this, \
&quot;msg&quot;)<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt;        (optional).notNull(ret);<br> &gt;&gt;&gt;&gt;             &gt;          \
&gt;      &gt;      &gt;      return ret;<br> &gt;&gt;&gt;&gt;             &gt;       \
&gt;      &gt;      &gt;  or even (if you like such<br> &gt;&gt;&gt;&gt;             \
syntax sugar) you<br> &gt;&gt;&gt;&gt;             &gt;         can define<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;      \
template&lt;typename T&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      \
&gt;      &gt;      T resultNotNull(T result) {<br> &gt;&gt;&gt;&gt;             &gt; \
&gt;      &gt;      &gt;          notNull(result);<br> &gt;&gt;&gt;&gt;             \
&gt;          &gt;      &gt;      &gt;          return result;<br> &gt;&gt;&gt;&gt;   \
&gt;          &gt;      &gt;      &gt;      }<br> &gt;&gt;&gt;&gt;             &gt;   \
&gt;      &gt;      &gt;  and do<br> &gt;&gt;&gt;&gt;             &gt;          &gt;  \
&gt;      &gt;      ret = &lt;JNI call&gt;<br> &gt;&gt;&gt;&gt;             &gt;      \
&gt;      &gt;      &gt;      return<br> &gt;&gt;&gt;&gt;             \
JNICallResultVerifier(this,<br> &gt;&gt;&gt;&gt;             &gt;          &gt;  \
&quot;msg&quot;).resultNotNull(ret);<br> &gt;&gt;&gt;&gt;             &gt;          \
&gt;      &gt;      &gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      \
&gt;      &gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt; So I renamed FatalOnException<br> &gt;&gt;&gt;&gt;             to now being<br>
&gt;&gt;&gt;&gt;             &gt;         JNIVerifier.<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; Though I like it, \
I don&#39;t<br> &gt;&gt;&gt;&gt;             think we can do it,<br>
&gt;&gt;&gt;&gt;             &gt;         except if we<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     do it<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; slightly \
differently:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; \
I&#39;m trying to solve two<br> &gt;&gt;&gt;&gt;             problems with one \
stone:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  - How \
to check for returns<br> &gt;&gt;&gt;&gt;             of JNI calls in<br>
&gt;&gt;&gt;&gt;             &gt;         the way that is<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     done here<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  - How to \
remove<br> &gt;&gt;&gt;&gt;             NSK_JNI_VERIFY* (from<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;  nsk/share/jni/jni_tools)<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; However, the \
NSK_JNI_VERIFY<br> &gt;&gt;&gt;&gt;             need to start a<br>
&gt;&gt;&gt;&gt;             &gt;         tracing system<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     before<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     the<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; call to JNI, so \
it won&#39;t work<br> &gt;&gt;&gt;&gt;             this way. (Side<br>
&gt;&gt;&gt;&gt;             &gt;         question<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     would be<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     do we<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; still care about \
the tracing<br> &gt;&gt;&gt;&gt;             in NSK_JNI_VERIFY,<br>
&gt;&gt;&gt;&gt;             &gt;         if we<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     don&#39;t then<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     your<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; solution works \
well in most<br> &gt;&gt;&gt;&gt;             situations).<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; My vision or \
intuition is<br> &gt;&gt;&gt;&gt;             that we would throw a<br>
&gt;&gt;&gt;&gt;             &gt;         template<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     at some<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     point<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; on SafeJNIEnv to \
handle both<br> &gt;&gt;&gt;&gt;             cases and have<br>
&gt;&gt;&gt;&gt;             &gt;         JNIVerifier<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     become a<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; specialization in \
certain<br> &gt;&gt;&gt;&gt;             cases and something<br>
&gt;&gt;&gt;&gt;             &gt;         different<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     for the<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; NSK_JNI_VERIFY \
case (or have<br> &gt;&gt;&gt;&gt;             a different<br>
&gt;&gt;&gt;&gt;             &gt;         constructor to enable<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     tracing).<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; But for now, I \
offer the<br> &gt;&gt;&gt;&gt;             implementation that does:<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; jclass<br>
&gt;&gt;&gt;&gt;             SafeJNIEnv::GetObjectClass(jobject obj) {<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; \
JNIVerifier&lt;jclass&gt; marker(this,<br> &gt;&gt;&gt;&gt;             &gt;         \
&quot;GetObjectClass&quot;);<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      \
&gt;      &gt; return<br> &gt;&gt;&gt;&gt;             &gt;  \
marker.ResultNotNull(_jni_env-&gt;GetObjectClass(obj));<br> &gt;&gt;&gt;&gt;          \
&gt;          &gt;      &gt;      &gt; }<br> &gt;&gt;&gt;&gt;             &gt;        \
&gt;      &gt;      &gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      \
&gt;      &gt; and:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     \
&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; void<br>
&gt;&gt;&gt;&gt;             SafeJNIEnv::SetObjectField(jobject obj,<br>
&gt;&gt;&gt;&gt;             &gt;         jfieldID<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     field, jobject<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; value) {<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; \
JNIVerifier&lt;&gt; marker(this,<br> &gt;&gt;&gt;&gt;             \
&quot;SetObjectField&quot;);<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      \
&gt;      &gt; _jni_env-&gt;SetObjectField(obj,<br> &gt;&gt;&gt;&gt;             \
field, value);<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt; }<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  - you added \
#include<br> &gt;&gt;&gt;&gt;             &lt;memory&gt; in the test<br>
&gt;&gt;&gt;&gt;             &gt;         (and you have to<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     add it to<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  every test).<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  It would be \
simpler to add<br> &gt;&gt;&gt;&gt;             the include to<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     SafeJNIEnv.hpp and<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     define<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  typedef<br>
&gt;&gt;&gt;&gt;             std::unique_ptr&lt;SafeJNIEnv&gt;<br>
&gt;&gt;&gt;&gt;             &gt;         SafeJNIEnvPtr;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  Then each in the \
test methods:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; \
SafeJNIEnvPtr env(new<br> &gt;&gt;&gt;&gt;             SafeJNIEnv(jni_env));<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  or you can \
add<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  static \
SafeJNIEnv::SafeJNIEnvPtr<br> &gt;&gt;&gt;&gt;             &gt;         wrap(JNIEnv* \
jni_env,<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;  \
ErrorHandler<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  \
errorHandler = fatalError)<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      \
&gt;      &gt;  and get<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt; \
&gt;      SafeJNIEnvPtr env =<br> &gt;&gt;&gt;&gt;             &gt;         \
SafeJNIEnv::wrap(jni_env);<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      \
&gt;      &gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; Done, I \
like that, even less<br> &gt;&gt;&gt;&gt;             code change to<br>
&gt;&gt;&gt;&gt;             &gt;         tests then.<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  - it would be \
better to wrap<br> &gt;&gt;&gt;&gt;             internal classes<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;  (FatalOnException) \
into<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  unnamed \
namespace - this<br> &gt;&gt;&gt;&gt;             helps to avoid<br>
&gt;&gt;&gt;&gt;             &gt;         conflicts with<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     other<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     classes)<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  -<br>
&gt;&gt;&gt;&gt;             FatalOnException::check_for_null(void* ptr)<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  should be<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;              FatalOnException::check_for_null(const<br>
&gt;&gt;&gt;&gt;             &gt;         void* ptr)<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  And calling the \
method you<br> &gt;&gt;&gt;&gt;             don&#39;t need<br>
&gt;&gt;&gt;&gt;             &gt;         reinterpret_cast<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; Also done, it got \
renamed to<br> &gt;&gt;&gt;&gt;             ResultNotNull, is<br>
&gt;&gt;&gt;&gt;             &gt;         using a<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     template<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     now, but<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; agreed, that \
worked.<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt; \
Thanks again for the review,<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      \
&gt;      &gt; Jc<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      \
&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  --alex<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  On 09/18/2018 \
11:07, JC<br> &gt;&gt;&gt;&gt;             Beyler wrote:<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt; Hi \
David,<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   \
&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt; \
Thanks for the quick<br> &gt;&gt;&gt;&gt;             review and<br>
&gt;&gt;&gt;&gt;             &gt;         thoughts. I have<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     now a new<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  version here<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt; that \
addresses your comments:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      \
&gt;      &gt;   &gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;   \
&gt;   &gt; Webrev:<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;<br>
&gt;&gt;&gt;&gt;             <a \
href="http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.01/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/~jcbeyler/8210842/webrev.01/</a><br> \
&gt;&gt;&gt;&gt;             &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;       <br> &gt;&gt;&gt;&gt;              &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;   <br> &gt;&gt;&gt;&gt;              \
&lt;<a href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/" \
rel="noreferrer" target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/</a>&gt;<br>
 &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;<br>
&gt;&gt;&gt;&gt;             &gt;         <br>
&gt;&gt;&gt;&gt;              &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;     <br> &gt;&gt;&gt;&gt;             \
&lt;<a href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/" \
rel="noreferrer" target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/</a>&gt;<br>
 &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;   <br>
&gt;&gt;&gt;&gt;              &lt;<a \
href="http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/" rel="noreferrer" \
target="_blank">http://cr.openjdk.java.net/%7Ejcbeyler/8210842/webrev.01/</a>&gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;<br> \
&gt;&gt;&gt;&gt;             &gt;       <br> &gt;&gt;&gt;&gt;              Bug:<a \
href="https://bugs.openjdk.java.net/browse/JDK-8210842" rel="noreferrer" \
target="_blank">https://bugs.openjdk.java.net/browse/JDK-8210842</a><br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt; I&#39;ve \
also inlined my<br> &gt;&gt;&gt;&gt;             answers/comments.<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;      &gt; \
I&#39;ve slowly<br> &gt;&gt;&gt;&gt;             started working on<br>
&gt;&gt;&gt;&gt;             &gt;         JDK-8191519<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;      \
&gt;<br> &gt;&gt;&gt;&gt;             &gt;          &gt;   <br>
&gt;&gt;&gt;&gt;              &lt;<a \
href="https://bugs.openjdk.java.net/browse/JDK-8191519" rel="noreferrer" \
target="_blank">https://bugs.openjdk.java.net/browse/JDK-8191519</a>&gt;.<br> \
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  However \
before<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt; \
&gt; starting to really<br> &gt;&gt;&gt;&gt;             refactor all<br>
&gt;&gt;&gt;&gt;             &gt;         the tests, I<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     thought I&#39;d<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  get a few<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;      &gt; \
opinions. I am<br> &gt;&gt;&gt;&gt;             working on<br>
&gt;&gt;&gt;&gt;             &gt;         internalizing the<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     error<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;     handling<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;  of JNI<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;     \
calls<br> &gt;&gt;&gt;&gt;             &gt;          &gt;      &gt;      &gt;   &gt;  \
&gt; via a SafeJNIEnv<br> &gt;&gt;&gt;&gt;             class that<br>
&gt;&gt;&gt;&gt;             &gt;         redefines all<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;     the JNI<br>
&gt;&gt;&gt;&gt;             &gt;          &gt;  </blockquote></div><br \
clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" \
data-smartmail="gmail_signature"><div \
dir="ltr"><div><br></div>Thanks,<div>Jc</div></div></div>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic