comparison src/share/vm/prims/jvmtiExport.hpp @ 2195:bf8517f4e4d0

6766644: Redefinition of compiled method fails with assertion "Can not load classes with the Compiler thread" Summary: Defer posting events from the compiler thread: use service thread Reviewed-by: coleenp, dholmes, never, dcubed
author kamg
date Wed, 02 Feb 2011 14:38:01 -0500
parents 3582bf76420e
children f91db74a6810
comparison
equal deleted inserted replaced
2194:face83fc8882 2195:bf8517f4e4d0
1 /* 1 /*
2 * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
139 KlassHandle field_klass, Handle object, jfieldID field, 139 KlassHandle field_klass, Handle object, jfieldID field,
140 char sig_type, jvalue *value); 140 char sig_type, jvalue *value);
141 141
142 142
143 private: 143 private:
144 // CompiledMethodUnload events are reported from the VM thread so they
145 // are collected in lists (of jmethodID/addresses) and the events are posted later
146 // from threads posting CompieldMethodLoad or DynamicCodeGenerated events.
147 static bool _have_pending_compiled_method_unload_events;
148 static GrowableArray<jmethodID>* _pending_compiled_method_unload_method_ids;
149 static GrowableArray<const void *>* _pending_compiled_method_unload_code_begins;
150 static JavaThread* _current_poster;
151
152 // tests if there are CompiledMethodUnload events pending
153 inline static bool have_pending_compiled_method_unload_events() {
154 return _have_pending_compiled_method_unload_events;
155 }
156
157 // posts any pending CompiledMethodUnload events.
158 static void post_pending_compiled_method_unload_events();
159
160 // Perform the actual notification to interested JvmtiEnvs.
161 static void post_compiled_method_unload_internal(JavaThread* self, jmethodID mid, const void* code_begin);
162
163 // posts a DynamicCodeGenerated event (internal/private implementation). 144 // posts a DynamicCodeGenerated event (internal/private implementation).
164 // The public post_dynamic_code_generated* functions make use of the 145 // The public post_dynamic_code_generated* functions make use of the
165 // internal implementation. 146 // internal implementation.
166 static void post_dynamic_code_generated_internal(const char *name, const void *code_begin, const void *code_end) KERNEL_RETURN; 147 static void post_dynamic_code_generated_internal(const char *name, const void *code_begin, const void *code_end) KERNEL_RETURN;
167 148
254 int * micro); 235 int * micro);
255 236
256 // single stepping management methods 237 // single stepping management methods
257 static void at_single_stepping_point(JavaThread *thread, methodOop method, address location) KERNEL_RETURN; 238 static void at_single_stepping_point(JavaThread *thread, methodOop method, address location) KERNEL_RETURN;
258 static void expose_single_stepping(JavaThread *thread) KERNEL_RETURN; 239 static void expose_single_stepping(JavaThread *thread) KERNEL_RETURN;
259 static bool hide_single_stepping(JavaThread *thread) KERNEL_RETURN_(return false;); 240 static bool hide_single_stepping(JavaThread *thread) KERNEL_RETURN_(false);
260 241
261 // Methods that notify the debugger that something interesting has happened in the VM. 242 // Methods that notify the debugger that something interesting has happened in the VM.
262 static void post_vm_start (); 243 static void post_vm_start ();
263 static void post_vm_initialized (); 244 static void post_vm_initialized ();
264 static void post_vm_death (); 245 static void post_vm_death ();
269 static void post_exception_throw (JavaThread *thread, methodOop method, address location, oop exception) KERNEL_RETURN; 250 static void post_exception_throw (JavaThread *thread, methodOop method, address location, oop exception) KERNEL_RETURN;
270 static void notice_unwind_due_to_exception (JavaThread *thread, methodOop method, address location, oop exception, bool in_handler_frame) KERNEL_RETURN; 251 static void notice_unwind_due_to_exception (JavaThread *thread, methodOop method, address location, oop exception, bool in_handler_frame) KERNEL_RETURN;
271 252
272 static oop jni_GetField_probe (JavaThread *thread, jobject jobj, 253 static oop jni_GetField_probe (JavaThread *thread, jobject jobj,
273 oop obj, klassOop klass, jfieldID fieldID, bool is_static) 254 oop obj, klassOop klass, jfieldID fieldID, bool is_static)
274 KERNEL_RETURN_(return NULL;); 255 KERNEL_RETURN_(NULL);
275 static oop jni_GetField_probe_nh (JavaThread *thread, jobject jobj, 256 static oop jni_GetField_probe_nh (JavaThread *thread, jobject jobj,
276 oop obj, klassOop klass, jfieldID fieldID, bool is_static) 257 oop obj, klassOop klass, jfieldID fieldID, bool is_static)
277 KERNEL_RETURN_(return NULL;); 258 KERNEL_RETURN_(NULL);
278 static void post_field_access_by_jni (JavaThread *thread, oop obj, 259 static void post_field_access_by_jni (JavaThread *thread, oop obj,
279 klassOop klass, jfieldID fieldID, bool is_static) KERNEL_RETURN; 260 klassOop klass, jfieldID fieldID, bool is_static) KERNEL_RETURN;
280 static void post_field_access (JavaThread *thread, methodOop method, 261 static void post_field_access (JavaThread *thread, methodOop method,
281 address location, KlassHandle field_klass, Handle object, jfieldID field) KERNEL_RETURN; 262 address location, KlassHandle field_klass, Handle object, jfieldID field) KERNEL_RETURN;
282 static oop jni_SetField_probe (JavaThread *thread, jobject jobj, 263 static oop jni_SetField_probe (JavaThread *thread, jobject jobj,
283 oop obj, klassOop klass, jfieldID fieldID, bool is_static, char sig_type, 264 oop obj, klassOop klass, jfieldID fieldID, bool is_static, char sig_type,
284 jvalue *value) KERNEL_RETURN_(return NULL;); 265 jvalue *value) KERNEL_RETURN_(NULL);
285 static oop jni_SetField_probe_nh (JavaThread *thread, jobject jobj, 266 static oop jni_SetField_probe_nh (JavaThread *thread, jobject jobj,
286 oop obj, klassOop klass, jfieldID fieldID, bool is_static, char sig_type, 267 oop obj, klassOop klass, jfieldID fieldID, bool is_static, char sig_type,
287 jvalue *value) KERNEL_RETURN_(return NULL;); 268 jvalue *value) KERNEL_RETURN_(NULL);
288 static void post_field_modification_by_jni(JavaThread *thread, oop obj, 269 static void post_field_modification_by_jni(JavaThread *thread, oop obj,
289 klassOop klass, jfieldID fieldID, bool is_static, char sig_type, 270 klassOop klass, jfieldID fieldID, bool is_static, char sig_type,
290 jvalue *value); 271 jvalue *value);
291 static void post_raw_field_modification(JavaThread *thread, methodOop method, 272 static void post_raw_field_modification(JavaThread *thread, methodOop method,
292 address location, KlassHandle field_klass, Handle object, jfieldID field, 273 address location, KlassHandle field_klass, Handle object, jfieldID field,