Mercurial > hg > graal-jvmci-8
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, |