JDK-4937789 : JVMTI spec: spec clarifications and missing error returns -- September
  • Type: Bug
  • Component: hotspot
  • Sub-Component: jvmti
  • Affected Version: 5.0
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2003-10-15
  • Updated: 2017-05-16
  • Resolved: 2003-12-10
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
5.0 b31Fixed
Related Reports
Relates :  
Relates :  
Description
In the VMDeath event, add:
    No events will occur after the VMDeath event.

For structs returned by functions, array and string fields should have
the following text restored:
    On return, the xyz* points to a newly allocated array.
    The array should be freed with Deallocate.
These include:
    jvmtiThreadInfo: name
    jvmtiThreadGroupInfo: name
    jvmtiLocalVariableEntry: name, signature, and generic_signature
    jvmtiExtensionFunctionInfo: id, short_description, params and errors.
    jvmtiExtensionEventInfo: id, short_description, and params.

In GetCurrentThreadCpuTimerInfo and GetThreadCpuTimerInfo, add:
    Note that the implementations of GetCurrentThreadCpuTime
    and GetThreadCpuTime may differ, and thus the values
    returned by GetCurrentThreadCpuTimerInfo and GetThreadCpuTimerInfo
    may differ -- see GetCurrentThreadCpuTime for more information.

In GetThreadCpuTimerInfo, change:
    This information will not change during a particular invocation of the VM.
to:
    This information is specific to the platform and the implementation of
    GetThreadCpuTime and thus does not vary by thread nor does it vary
    during a particular invocation of the VM.

In GetCurrentThreadCpuTimerInfo, change:
    This information will not change during a particular invocation of the VM.
to:
    This information is specific to the platform and the implementation of
    GetCurrentThreadCpuTime and thus does not vary by thread nor does it vary
    during a particular invocation of the VM.

In IterateOverReachableObjects and IterateOverObjectsReachableFromObject, add:
    The callback for an object will always follow the callback for its referrer.

Capabilities section:
    Remove the example that still uses EstimateCostOfCapabilities (which has 
    been removed).

In GetTime, replace:
    Return the time since some arbitrary start time in the past.
with text corresponding to Java programming language level access:
    Return the current value of the system timer, in nanoseconds. <p>
    This function can only be used to measure elapsed time and is
    not related to any notion of system, or wall-clock time.  The
    value returned represents nanoseconds since some fixed but
    arbitrary time (perhaps in the future, so values may be
    negative).  This function provides nanosecond precision, but not
    necessarily nanosecond accuracy. No guarantees are made about
    how frequently values change.

In the following functions -- **
    CreateRawMonitor()
    DestroyRawMonitor()
    RawMonitorEnter()
    RawMonitorExit()
    RawMonitorWait()
    RawMonitorNotify()
    RawMonitorNotifyAll()
    Allocate()
    Deallocate()
    SetEnvironmentLocalStorage()
    GetEnvironmentLocalStorage()
Add the text:
    This function may be called from the callbacks to the
    Heap iteration functions, or from the event handles for the 
    GarbageCollectionStart, GarbageCollectionFinish and ObjectFree events.
And in those callbacks, replace:
    This callback should not use JNI functions or JVMTI functions 
    (except the raw monitor functions, Allocate or Deallocate).
with:
    This callback must not use JNI functions.
    This callback must not use JVMTI functions except those which
    specifically allow such use (see the raw monitor, memory management, 
    and environment local storage functions).

In the "JVMTI Environments" section of the intro, change:
    While the JVMTI state is separate, agents inspect and modify the shared state 
    of the VM, they also share the native environment in which they execute.
    As such, an agent can perturb the results of other agents or cause them 
    to fail.  Techniques to reduce the likely of these occurrences are beyond 
    the scope of this document.
to:
    While the JVMTI state is separate, agents inspect and modify the shared state 
    of the VM, they also share the native environment in which they execute.
    As such, an agent can perturb the results of other agents or cause them 
    to fail.  It is the responsibility of the agent writer to specify the level
    of compatibility with other agents.  JVMTI implementations are not capable
    of preventing destructive interactions between agents. Techniques to reduce 
    the likelyhood of these occurrences are beyond the scope of this document.  

In IterateOverObjectsReachableFromObject, replace:
    This function iterates over all objects that are reachable from the specified object. 
with:
    This function iterates over all objects that are directly 
    and indirectly reachable from the specified object.

In IterateOverReachableObjects, replace:
    This function iterates over all objects that are reachable from the root objects. 
with:
    This function iterates over the root object and all objects that are directly 
    and indirectly reachable from the root objects. 

In IterateOverReachableObjects, after:
    For each object reference the object_ref_callback  callback function is 
    called to describe the object reference.
add:
    The callback is called exactly once for each pair of object and referrer;
    this is true even if there are reference cycles or multiple paths to the referrer.

Change JVMTI_ERROR_NULL_POINTER description from:
    Invalid pointer.
to:
    Pointer is unexpectedly NULL.

In AddToBootstrapClassLoaderSearch, add missing error return:
    JVMTI_ERROR_ILLEGAL_ARGUMENT -- segment is an invalid path

In DynamicCodeGenerated event, name parameter, add:
   The name might not be unique.

In GenerateEvents, add missing error return:
    JVMTI_ERROR_ILLEGAL_ARGUMENT -- event type other than 
                                      JVMTI_EVENT_COMPILED_METHOD_LOAD or 
                                      JVMTI_EVENT_DYNAMIC_CODE_GENERATED specified.

In the ClassFileLoadHook event, name parameter, replace:
     Fully qualified name of class being loaded in UTF-8 format.
with:
     Name of class being loaded as a VM internal qualified name (e.g. "java/util/List") 
     in UTF-8 format.

In GetPhase, update the phase lists -- remove references to removed functionality:
EstimateCostOfCapabilities and VerboseOutput.

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: tiger-beta FIXED IN: tiger-beta INTEGRATED IN: tiger-b31 tiger-beta
14-06-2004

EVALUATION spec needs this update
11-06-2004