diff -r 2c9e2ec54a11 -r 0486d7749b8d src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp --- a/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp Thu Jun 21 12:03:54 2018 -0700 +++ b/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp Thu Jun 21 20:52:52 2018 +0200 @@ -66,7 +66,6 @@ _free_list_mspace(NULL), _epoch_transition_mspace(NULL), _lock(NULL), - _type_manager(NULL), _service_thread(NULL), _chunkwriter(cw), _checkpoint_epoch_state(JfrTraceIdEpoch::epoch()) {} @@ -81,9 +80,7 @@ if (_lock != NULL) { delete _lock; } - if (_type_manager) { - delete _type_manager; - } + JfrTypeManager::clear(); } static const size_t unlimited_mspace_size = 0; @@ -109,14 +106,12 @@ if (_epoch_transition_mspace == NULL) { return false; } - assert(_type_manager == NULL, "invariant"); - _type_manager = new JfrTypeManager(); - if (_type_manager == NULL || !_type_manager->initialize()) { + assert(_lock == NULL, "invariant"); + _lock = new Mutex(Monitor::leaf - 1, "Checkpoint mutex", Mutex::_allow_vm_block_flag, Monitor::_safepoint_check_never); + if (_lock == NULL) { return false; } - assert(_lock == NULL, "invariant"); - _lock = new Mutex(Monitor::leaf - 1, "Checkpoint mutex", Mutex::_allow_vm_block_flag, Monitor::_safepoint_check_never); - return _lock != NULL; + return JfrTypeManager::initialize(); } bool JfrCheckpointManager::use_epoch_transition_mspace(const Thread* thread) const { @@ -354,37 +349,32 @@ return discarder.processed(); } -bool JfrCheckpointManager::register_serializer(JfrTypeId id, bool require_safepoint, bool permit_cache, JfrSerializer* cs) { - assert(cs != NULL, "invariant"); - return instance()._type_manager->register_serializer(id, require_safepoint, permit_cache, cs); -} - size_t JfrCheckpointManager::write_types() { JfrCheckpointWriter writer(false, true, Thread::current()); - _type_manager->write_types(writer); + JfrTypeManager::write_types(writer); return writer.used_size(); } size_t JfrCheckpointManager::write_safepoint_types() { // this is also a "flushpoint" JfrCheckpointWriter writer(true, true, Thread::current()); - _type_manager->write_safepoint_types(writer); + JfrTypeManager::write_safepoint_types(writer); return writer.used_size(); } void JfrCheckpointManager::write_type_set() { - _type_manager->write_type_set(); + JfrTypeManager::write_type_set(); } void JfrCheckpointManager::write_type_set_for_unloaded_classes() { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!"); - instance()._type_manager->write_type_set_for_unloaded_classes(); + JfrTypeManager::write_type_set_for_unloaded_classes(); } void JfrCheckpointManager::create_thread_checkpoint(JavaThread* jt) { - instance()._type_manager->create_thread_checkpoint(jt); + JfrTypeManager::create_thread_checkpoint(jt); } void JfrCheckpointManager::write_thread_checkpoint(JavaThread* jt) { - instance()._type_manager->write_thread_checkpoint(jt); + JfrTypeManager::write_thread_checkpoint(jt); }