RFA: JVMTI GetFrameCount

Kyle Galloway kgallowa@redhat.com
Mon Jul 31 19:33:00 GMT 2006


Tom Tromey wrote:
>>>>>> "Kyle" == Kyle Galloway <kgallowa@redhat.com> writes:
>>>>>>             
>
> Kyle> This patch implements the GetFrameCount functionality of jvmti.  Any 
> Kyle> comments? If not could someone please commit this.
>
> I have a couple questions about it.
>
> Kyle> +  //get the top frame
> Kyle> +  _Jv_InterpFrame* top = reinterpret_cast<_Jv_InterpFrame *> (t->interp_frame);
> Kyle> +  *count = 0;
>
> First, there seems to be a race condition here, if the request is for
> a thread other than the current thread.  In this case the data we're
> accessing might be invalidated while we're running, leading to crashes
> or other weirdness.
>   
This implies that we need to suspend the thread, at least temporarily, 
to keep the interpreter from crashing.  The problem being that JVMTI 
doesn't use a suspend count for each thread.  The result of this is that 
if we use this method to implement a JDWP call (which does use a suspend 
count) there is no way to make sure the thread isn't resumed out from 
under JDWP since the JVMTI resume call resumes the thread regardless of 
the suspend count.  The solution is probably to have JVMTI use a suspend 
count internally so it can keep in sync with JDWP.
> Second, while I understand that we're likely only to be able to debug
> interpreted frames, in a case like this we may want to consider
> getting a full stack trace, rather than simply pulling out the
> interpreted frames.  I'm not really sure however.
>   
This is more a problem with the structure of the stack from within the 
interpreter.  The structure that the thread is aware of is a linked list 
containing only the interpreted stack frames.  The easiest way to fix 
this would simply be to create a superclass to hold either the current 
_Jv_InterpFrame structure or a placeholder for a native call so that the 
JVMTI functions will be aware of it.  Is there another way to do this?

Kyle



More information about the Java-patches mailing list