440 void DCmdFactory::send_notification(TRAPS) {
441 DCmdFactory::send_notification_internal(THREAD);
442 // Clearing pending exception to avoid premature termination of
443 // the service thread
444 if (HAS_PENDING_EXCEPTION) {
445 CLEAR_PENDING_EXCEPTION;
446 }
447 }
448 void DCmdFactory::send_notification_internal(TRAPS) {
449 ResourceMark rm(THREAD);
450 HandleMark hm(THREAD);
451 bool notif = false;
452 {
453 MutexLockerEx ml(Service_lock, Mutex::_no_safepoint_check_flag);
454 notif = _has_pending_jmx_notification;
455 _has_pending_jmx_notification = false;
456 }
457 if (notif) {
458
459 Klass* k = Management::com_sun_management_internal_DiagnosticCommandImpl_klass(CHECK);
460 instanceKlassHandle dcmd_mbean_klass(THREAD, k);
461
462 JavaValue result(T_OBJECT);
463 JavaCalls::call_static(&result,
464 dcmd_mbean_klass,
465 vmSymbols::getDiagnosticCommandMBean_name(),
466 vmSymbols::getDiagnosticCommandMBean_signature(),
467 CHECK);
468
469 instanceOop m = (instanceOop) result.get_jobject();
470 instanceHandle dcmd_mbean_h(THREAD, m);
471
472 if (!dcmd_mbean_h->is_a(k)) {
473 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
474 "DiagnosticCommandImpl.getDiagnosticCommandMBean didn't return a DiagnosticCommandMBean instance");
475 }
476
477 JavaValue result2(T_VOID);
478 JavaCallArguments args2(dcmd_mbean_h);
479
480 JavaCalls::call_virtual(&result2,
|
440 void DCmdFactory::send_notification(TRAPS) {
441 DCmdFactory::send_notification_internal(THREAD);
442 // Clearing pending exception to avoid premature termination of
443 // the service thread
444 if (HAS_PENDING_EXCEPTION) {
445 CLEAR_PENDING_EXCEPTION;
446 }
447 }
448 void DCmdFactory::send_notification_internal(TRAPS) {
449 ResourceMark rm(THREAD);
450 HandleMark hm(THREAD);
451 bool notif = false;
452 {
453 MutexLockerEx ml(Service_lock, Mutex::_no_safepoint_check_flag);
454 notif = _has_pending_jmx_notification;
455 _has_pending_jmx_notification = false;
456 }
457 if (notif) {
458
459 Klass* k = Management::com_sun_management_internal_DiagnosticCommandImpl_klass(CHECK);
460 InstanceKlass* dcmd_mbean_klass = InstanceKlass::cast(k);
461
462 JavaValue result(T_OBJECT);
463 JavaCalls::call_static(&result,
464 dcmd_mbean_klass,
465 vmSymbols::getDiagnosticCommandMBean_name(),
466 vmSymbols::getDiagnosticCommandMBean_signature(),
467 CHECK);
468
469 instanceOop m = (instanceOop) result.get_jobject();
470 instanceHandle dcmd_mbean_h(THREAD, m);
471
472 if (!dcmd_mbean_h->is_a(k)) {
473 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
474 "DiagnosticCommandImpl.getDiagnosticCommandMBean didn't return a DiagnosticCommandMBean instance");
475 }
476
477 JavaValue result2(T_VOID);
478 JavaCallArguments args2(dcmd_mbean_h);
479
480 JavaCalls::call_virtual(&result2,
|