Uploaded image for project: 'CCC Migration Project'
  1. CCC Migration Project
  2. CCC-8155881

JNI Specification for DetachCurrentThread needs modification in relation to pending exceptions

    XMLWordPrintable

    Details

    • Type: CSR
    • Status: Closed
    • Priority: P3
    • Resolution: Approved
    • Fix Version/s: 9
    • Component/s: docs
    • Labels:
    • Subcomponent:
    • Compatibility Kind:
      behavioral
    • Compatibility Risk:
      minimal
    • Compatibility Risk Description:
      No risk at all this simply brings the existing VM behaviour into compliance with the JNI specification.
    • Interface Kind:
      Other
    • Scope:
      SE

      Description

      Summary

      Allow DetachCurrentThread to be called with an exception pending.

      Problem

      Currently the JNI specification indicates that, unless listed otherwise, no JNI method should be called with a pending exception. DetachCurrentThread is not listed as allowing a pending exception, but the implementation of DetachCurrentThread in hotspot implements the "uncaught exception handling" that is expected in Java threads - via the Thread->exit() call which invokes JavaThread::exit

      This puts hotspot in conflict with the specification, but the uncaught exception handling is highly desirable so we do not want to change the behaviour of the VM.

      But it is probably too strong to mandate that DetachCurrentThread must do uncaught exception handling, so we simply modify the spec to allow hotspots behaviour to be compliant.

      Solution

      Proposed changes:

      First add DetachCurrentThread to the list of methods that can be called with an exception pending:

      --- old/docs/technotes/guides/jni/spec/design.html Tue May 31 02:47:24 2016
      +++ new/docs/technotes/guides/jni/spec/design.html Tue May 31 02:47:22 2016
      @@ -678,7 +678,8 @@
       DeleteWeakGlobalRef()
       MonitorExit()
       PushLocalFrame()
      -PopLocalFrame()</pre>
      +PopLocalFrame()
      +DetachCurrentThread()</pre>

           

      Secondly, add a note in DetachCurrentThread that any such exception may be reported:

      --- old/docs/technotes/guides/jni/spec/invocation.html Tue May 31 02:47:29 2016
      +++ new/docs/technotes/guides/jni/spec/invocation.html Tue May 31 02:47:27 2016
      @@ -666,6 +666,8 @@
       The main thread can be detached from the VM.
       <p>Trying to detach a thread that is not attached
       is a no-op.</p>
      +<p>If an exception is pending when <code>DetachCurrentThread</code> is called,
      +the VM may choose to report its existence.</p>

      Specification

      Proposed change:
      
      --- old/docs/technotes/guides/jni/spec/design.html Tue May 31 02:47:24 2016
      +++ new/docs/technotes/guides/jni/spec/design.html Tue May 31 02:47:22 2016
      @@ -678,7 +678,8 @@
       DeleteWeakGlobalRef()
       MonitorExit()
       PushLocalFrame()
      -PopLocalFrame()</pre>
      +PopLocalFrame()
      +DetachCurrentThread()</pre>
       
       <table width="100%" summary="">
       <tr>
      --- old/docs/technotes/guides/jni/spec/invocation.html Tue May 31 02:47:29 2016
      +++ new/docs/technotes/guides/jni/spec/invocation.html Tue May 31 02:47:27 2016
      @@ -666,6 +666,8 @@
       The main thread can be detached from the VM.
       <p>Trying to detach a thread that is not attached
       is a no-op.</p>
      +<p>If an exception is pending when <code>DetachCurrentThread</code> is called,
      +the VM may choose to report its existence.</p>

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              dholmes David Holmes
              Reporter:
              dholmes David Holmes
              Reviewed By:
              Serguei Spitsyn
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: