This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA/JVMTI] Implement GetLocalVariableTable and GetMaxLocals


Tom Tromey wrote:

Ok. One more problem I failed to notice earlier :(

Oh boy. My bad... I don't know why I didn't notice this. Or perhaps I've missed the point.


A long time ago (20070207), Tom wrote:

> Kyle> + int get_local_var_table (char **name, char **sig, char **generic_sig,
> Kyle> + long *startloc, jint *length, jint *slot,
> Kyle> + int table_slot)
> Kyle> + *name = reinterpret_cast<char *>
> Kyle> + (_Jv_AllocBytes (strlen (local_var_table[table_slot].name) + 1));
>
> I don't see how memory allocated here can ever be freed.


The client is responsible for doing it:

  jint entry_count;
  jvmtiLocalVariableEntry *table;
  jvmtiError err;
  err = env->GetLocalVariableTable(method, entry_count, table);
  if (err != JVMTI_ERROR_NONE)
    // whatever

// do something with the table

  for (jint i = 0; i < entry_count; ++i)
   {
    jvmtiLocalVaribleEntry ve = table[i];
    env->Deallocate ((unsigned char *) ve->name);
    env->Deallocate ((unsigned char *) ve->signature);
    if (ve->generic_signature != NULL)
      env->Deallocate ((unsigned char *) ve->generic_signature);
   }

env->Deallocate ((unsigned char *) table);

Or at least that's what I get from the spec (reformatted by me):

"jvmtiLocalVariableEntry **table_ptr
  On return, points to an array of local variable table entries.

Agent passes a pointer to a jvmtiLocalVariableEntry*. On return, the jvmtiLocalVariableEntry* points to a newly allocated array of size *entry_count_ptr. The array should be freed with Deallocate. The pointers returned in the field name of jvmtiLocalVariableEntry are newly allocated arrays. The arrays should be freed with Deallocate. The pointers returned in the field signature of jvmtiLocalVariableEntry are newly allocated arrays. The arrays should be freed with Deallocate. The pointers returned in the field generic_signature of jvmtiLocalVariableEntry are newly allocated arrays. The arrays should be freed with Deallocate."

??
Keith


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]