src/share/vm/prims/jvmtiImpl.cpp

changeset 2836
0cddebc420d8
parent 2624
46a56fac55c7
child 3156
f08d439fab8c
     1.1 --- a/src/share/vm/prims/jvmtiImpl.cpp	Wed Apr 27 06:20:00 2011 -0700
     1.2 +++ b/src/share/vm/prims/jvmtiImpl.cpp	Thu Apr 28 08:24:46 2011 -0700
     1.3 @@ -38,6 +38,7 @@
     1.4  #include "runtime/handles.inline.hpp"
     1.5  #include "runtime/interfaceSupport.hpp"
     1.6  #include "runtime/javaCalls.hpp"
     1.7 +#include "runtime/os.hpp"
     1.8  #include "runtime/serviceThread.hpp"
     1.9  #include "runtime/signature.hpp"
    1.10  #include "runtime/vframe.hpp"
    1.11 @@ -939,10 +940,15 @@
    1.12    nmethodLocker::lock_nmethod(nm, true /* zombie_ok */);
    1.13    return event;
    1.14  }
    1.15 +
    1.16  JvmtiDeferredEvent JvmtiDeferredEvent::dynamic_code_generated_event(
    1.17        const char* name, const void* code_begin, const void* code_end) {
    1.18    JvmtiDeferredEvent event = JvmtiDeferredEvent(TYPE_DYNAMIC_CODE_GENERATED);
    1.19 -  event._event_data.dynamic_code_generated.name = name;
    1.20 +  // Need to make a copy of the name since we don't know how long
    1.21 +  // the event poster will keep it around after we enqueue the
    1.22 +  // deferred event and return. strdup() failure is handled in
    1.23 +  // the post() routine below.
    1.24 +  event._event_data.dynamic_code_generated.name = os::strdup(name);
    1.25    event._event_data.dynamic_code_generated.code_begin = code_begin;
    1.26    event._event_data.dynamic_code_generated.code_end = code_end;
    1.27    return event;
    1.28 @@ -968,12 +974,19 @@
    1.29        nmethodLocker::unlock_nmethod(nm);
    1.30        break;
    1.31      }
    1.32 -    case TYPE_DYNAMIC_CODE_GENERATED:
    1.33 +    case TYPE_DYNAMIC_CODE_GENERATED: {
    1.34        JvmtiExport::post_dynamic_code_generated_internal(
    1.35 -        _event_data.dynamic_code_generated.name,
    1.36 +        // if strdup failed give the event a default name
    1.37 +        (_event_data.dynamic_code_generated.name == NULL)
    1.38 +          ? "unknown_code" : _event_data.dynamic_code_generated.name,
    1.39          _event_data.dynamic_code_generated.code_begin,
    1.40          _event_data.dynamic_code_generated.code_end);
    1.41 +      if (_event_data.dynamic_code_generated.name != NULL) {
    1.42 +        // release our copy
    1.43 +        os::free((void *)_event_data.dynamic_code_generated.name);
    1.44 +      }
    1.45        break;
    1.46 +    }
    1.47      default:
    1.48        ShouldNotReachHere();
    1.49    }

mercurial