Or a suppressed exception. Mike
On Feb 25 2014, at 06:14 , Roger Riggs <roger.ri...@oracle.com> wrote: > In some cases, I would expect that the exception being overridden > would/should become the 'cause' of the new exception so it is not cleared > but chained. Does JNI support that? > > On the original issue, discarding of exceptions should be explicit not > implicit. > Keep (or insert) the exceptionClear(). > > Roger > > On 2/25/2014 6:35 AM, Chris Hegarty wrote: >> >> >> On 25/02/14 11:26, Petr Pchelko wrote: >>> Hello, Alan. >>> >>>> I can see how this might be attractive but doesn't it mean you are >>>> suppressing an important exception? >>> In case we’ve already got into the JNU_Throw we will throw a new exception >>> and override the original one anyway. However I agree that this might >>> suppress the warning for the code analysis tools. >>> >>>> Are the examples that you are looking at along these lines? >>> There are a number of examples when JNU_Throw is used to: >>> 1. Replace the message of an original exception: >>> src/share/native/sun/awt/image/awt_ImageRep.c:192 >>> There are a few such places. >>> >>> 2. Rethrow some meaningful exception if the call to some function failed: >>> src/windows/native/sun/windows/awt_Window.cpp:2861 >>> This is a much more common use case. In this case we have a return code >>> from some method and we do not care if it was failed because of JNI >>> exception or for some other reason. This is the main case where we need to >>> add env->ExceptionClear() everywhere. >>> >>> 3. Quite common is to use it in the initIDs method to rethrow >>> NoSuchFieldError: src/share/native/sun/awt/image/BufImgSurfaceData.c:77 >>> This one is questionable, I think that rethrowing is not needed here at >>> all, the original exception is much more informative. >> >> Agreed. Similar to NetworkInterface.c Line:172 >> >> http://hg.openjdk.java.net/jdk9/dev/jdk/file/6ee5c47bdba7/src/solaris/native/java/net/NetworkInterface.c#172 >> >> >> -Chris. >> >>> 4. Where currently are throwing an exception with pure JNI, but it could be >>> replaces with JNU: src/windows/native/sun/windows/awt_PrintJob.cpp:1365 >>> Similar to #2. >>> >>> With best regards. Petr. >>> >>> 25 февр. 2014 г., в 2:42 после полудня, Alan Bateman >>> <alan.bate...@oracle.com> написал(а): >>> >>>> On 25/02/2014 10:31, Petr Pchelko wrote: >>>>> Hello, Core and AWT teams. >>>>> >>>>> In AWT we have a lot of pending exception warnings which are now being >>>>> fixed. A big fraction of this warnings is about a pending JNI exception >>>>> at a call to JNU_Throw*. >>>>> Why don’t we add an env->ExceptionClear() call in the beginning of each >>>>> JNU_Throw function? It is absolutely safe because: >>>>> 1. We are rethrowing an exception an loosing the original one anyway. >>>>> 2. In case there’s no pending exception the ExceptionClear is a no-op. >>>>> >>>>> If we do this the code would become much cleaner, because currently we >>>>> have to manually clear a pending exception before every call to >>>>> JNU_Throw*. >>>>> >>>>> What do you think about this proposal? >>>>> >>>> I can see how this might be attractive but doesn't it mean you are >>>> suppressing an important exception? We've fixed many areas in the last few >>>> weeks and I think a common case was just that whoever wrote the original >>>> code didn't realize that some JNI functions having a pending exception >>>> when they fail. In those cases then often it is a simple matter of just >>>> returning from the JNI function (maybe after some clean-up). Are the >>>> examples that you are looking at along these lines? I guess I'm mostly >>>> interested to know whether the JNU_Throw usages are needed or not. >>>> >>>> -Alan. >>> >