408 jobject _object; 409 JavaThread* _calling_thread; 410 jvmtiMonitorUsage* _info_ptr; 411 jvmtiError _result; 412 413 public: 414 VM_GetObjectMonitorUsage(JvmtiEnv *env, JavaThread* calling_thread, jobject object, jvmtiMonitorUsage* info_ptr) { 415 _env = env; 416 _object = object; 417 _calling_thread = calling_thread; 418 _info_ptr = info_ptr; 419 } 420 VMOp_Type type() const { return VMOp_GetObjectMonitorUsage; } 421 jvmtiError result() { return _result; } 422 void doit() { 423 _result = ((JvmtiEnvBase*) _env)->get_object_monitor_usage(_calling_thread, _object, _info_ptr); 424 } 425 426 }; 427 428 // VM operation to get current contended monitor. 429 class VM_GetCurrentContendedMonitor : public VM_Operation { 430 private: 431 JvmtiEnv *_env; 432 JavaThread *_calling_thread; 433 JavaThread *_java_thread; 434 jobject *_owned_monitor_ptr; 435 jvmtiError _result; 436 437 public: 438 VM_GetCurrentContendedMonitor(JvmtiEnv *env, JavaThread *calling_thread, JavaThread *java_thread, jobject *mon_ptr) { 439 _env = env; 440 _calling_thread = calling_thread; 441 _java_thread = java_thread; 442 _owned_monitor_ptr = mon_ptr; 443 } 444 VMOp_Type type() const { return VMOp_GetCurrentContendedMonitor; } 445 jvmtiError result() { return _result; } 446 void doit(); 447 }; 448 449 // VM operation to get stack trace at safepoint. 450 class VM_GetStackTrace : public VM_Operation { 451 private: 452 JvmtiEnv *_env; 453 JavaThread *_java_thread; 454 jint _start_depth; 455 jint _max_count; 456 jvmtiFrameInfo *_frame_buffer; 457 jint *_count_ptr; 458 jvmtiError _result; 459 460 public: 461 VM_GetStackTrace(JvmtiEnv *env, JavaThread *java_thread, 462 jint start_depth, jint max_count, 463 jvmtiFrameInfo* frame_buffer, jint* count_ptr) { 464 _env = env; 465 _java_thread = java_thread; 466 _start_depth = start_depth; | 408 jobject _object; 409 JavaThread* _calling_thread; 410 jvmtiMonitorUsage* _info_ptr; 411 jvmtiError _result; 412 413 public: 414 VM_GetObjectMonitorUsage(JvmtiEnv *env, JavaThread* calling_thread, jobject object, jvmtiMonitorUsage* info_ptr) { 415 _env = env; 416 _object = object; 417 _calling_thread = calling_thread; 418 _info_ptr = info_ptr; 419 } 420 VMOp_Type type() const { return VMOp_GetObjectMonitorUsage; } 421 jvmtiError result() { return _result; } 422 void doit() { 423 _result = ((JvmtiEnvBase*) _env)->get_object_monitor_usage(_calling_thread, _object, _info_ptr); 424 } 425 426 }; 427 428 // HandshakeClosure to get current contended monitor. 429 class GetOneCurrentContendedMonitor : public HandshakeClosure { 430 private: 431 JvmtiEnv *_env; 432 JavaThread *_calling_thread; 433 jobject *_owned_monitor_ptr; 434 jvmtiError _result; 435 436 public: 437 GetOneCurrentContendedMonitor(JvmtiEnv *env, JavaThread *calling_thread, jobject *mon_ptr) : HandshakeClosure("GetOneCurrentContendedMonitor") { 438 _env = env; 439 _calling_thread = calling_thread; 440 _owned_monitor_ptr = mon_ptr; 441 _result = JVMTI_ERROR_THREAD_NOT_ALIVE; 442 } 443 jvmtiError result() { return _result; } 444 void do_thread(Thread *target); 445 }; 446 447 // VM operation to get stack trace at safepoint. 448 class VM_GetStackTrace : public VM_Operation { 449 private: 450 JvmtiEnv *_env; 451 JavaThread *_java_thread; 452 jint _start_depth; 453 jint _max_count; 454 jvmtiFrameInfo *_frame_buffer; 455 jint *_count_ptr; 456 jvmtiError _result; 457 458 public: 459 VM_GetStackTrace(JvmtiEnv *env, JavaThread *java_thread, 460 jint start_depth, jint max_count, 461 jvmtiFrameInfo* frame_buffer, jint* count_ptr) { 462 _env = env; 463 _java_thread = java_thread; 464 _start_depth = start_depth; |