src/hotspot/share/services/diagnosticFramework.cpp
changeset 52448 bc5c7f63dbae
parent 50600 8e17fffa0a4b
child 54623 1126f0607c70
equal deleted inserted replaced
52447:4547f8303f2d 52448:bc5c7f63dbae
   489             &args2,
   489             &args2,
   490             CHECK);
   490             CHECK);
   491   }
   491   }
   492 }
   492 }
   493 
   493 
   494 Mutex* DCmdFactory::_dcmdFactory_lock = new Mutex(Mutex::leaf, "DCmdFactory", true, Monitor::_safepoint_check_never);
       
   495 bool DCmdFactory::_send_jmx_notification = false;
   494 bool DCmdFactory::_send_jmx_notification = false;
   496 
   495 
   497 DCmdFactory* DCmdFactory::factory(DCmdSource source, const char* name, size_t len) {
   496 DCmdFactory* DCmdFactory::factory(DCmdSource source, const char* name, size_t len) {
   498   MutexLockerEx ml(_dcmdFactory_lock, Mutex::_no_safepoint_check_flag);
   497   MutexLockerEx ml(DCmdFactory_lock, Mutex::_no_safepoint_check_flag);
   499   DCmdFactory* factory = _DCmdFactoryList;
   498   DCmdFactory* factory = _DCmdFactoryList;
   500   while (factory != NULL) {
   499   while (factory != NULL) {
   501     if (strlen(factory->name()) == len &&
   500     if (strlen(factory->name()) == len &&
   502         strncmp(name, factory->name(), len) == 0) {
   501         strncmp(name, factory->name(), len) == 0) {
   503       if(factory->export_flags() & source) {
   502       if(factory->export_flags() & source) {
   510   }
   509   }
   511   return NULL;
   510   return NULL;
   512 }
   511 }
   513 
   512 
   514 int DCmdFactory::register_DCmdFactory(DCmdFactory* factory) {
   513 int DCmdFactory::register_DCmdFactory(DCmdFactory* factory) {
   515   MutexLockerEx ml(_dcmdFactory_lock, Mutex::_no_safepoint_check_flag);
   514   MutexLockerEx ml(DCmdFactory_lock, Mutex::_no_safepoint_check_flag);
   516   factory->_next = _DCmdFactoryList;
   515   factory->_next = _DCmdFactoryList;
   517   _DCmdFactoryList = factory;
   516   _DCmdFactoryList = factory;
   518   if (_send_jmx_notification && !factory->_hidden
   517   if (_send_jmx_notification && !factory->_hidden
   519       && (factory->_export_flags & DCmd_Source_MBean)) {
   518       && (factory->_export_flags & DCmd_Source_MBean)) {
   520     DCmdFactory::push_jmx_notification_request();
   519     DCmdFactory::push_jmx_notification_request();
   535   THROW_MSG_NULL(vmSymbols::java_lang_IllegalArgumentException(),
   534   THROW_MSG_NULL(vmSymbols::java_lang_IllegalArgumentException(),
   536              "Unknown diagnostic command");
   535              "Unknown diagnostic command");
   537 }
   536 }
   538 
   537 
   539 GrowableArray<const char*>* DCmdFactory::DCmd_list(DCmdSource source) {
   538 GrowableArray<const char*>* DCmdFactory::DCmd_list(DCmdSource source) {
   540   MutexLockerEx ml(_dcmdFactory_lock, Mutex::_no_safepoint_check_flag);
   539   MutexLockerEx ml(DCmdFactory_lock, Mutex::_no_safepoint_check_flag);
   541   GrowableArray<const char*>* array = new GrowableArray<const char*>();
   540   GrowableArray<const char*>* array = new GrowableArray<const char*>();
   542   DCmdFactory* factory = _DCmdFactoryList;
   541   DCmdFactory* factory = _DCmdFactoryList;
   543   while (factory != NULL) {
   542   while (factory != NULL) {
   544     if (!factory->is_hidden() && (factory->export_flags() & source)) {
   543     if (!factory->is_hidden() && (factory->export_flags() & source)) {
   545       array->append(factory->name());
   544       array->append(factory->name());
   548   }
   547   }
   549   return array;
   548   return array;
   550 }
   549 }
   551 
   550 
   552 GrowableArray<DCmdInfo*>* DCmdFactory::DCmdInfo_list(DCmdSource source ) {
   551 GrowableArray<DCmdInfo*>* DCmdFactory::DCmdInfo_list(DCmdSource source ) {
   553   MutexLockerEx ml(_dcmdFactory_lock, Mutex::_no_safepoint_check_flag);
   552   MutexLockerEx ml(DCmdFactory_lock, Mutex::_no_safepoint_check_flag);
   554   GrowableArray<DCmdInfo*>* array = new GrowableArray<DCmdInfo*>();
   553   GrowableArray<DCmdInfo*>* array = new GrowableArray<DCmdInfo*>();
   555   DCmdFactory* factory = _DCmdFactoryList;
   554   DCmdFactory* factory = _DCmdFactoryList;
   556   while (factory != NULL) {
   555   while (factory != NULL) {
   557     if (!factory->is_hidden() && (factory->export_flags() & source)) {
   556     if (!factory->is_hidden() && (factory->export_flags() & source)) {
   558       array->append(new DCmdInfo(factory->name(),
   557       array->append(new DCmdInfo(factory->name(),