274 bool _flushpoint; |
274 bool _flushpoint; |
275 public: |
275 public: |
276 TypeSetSerialization(bool class_unload, bool flushpoint, JfrCheckpointWriter* leakp_writer = NULL) : |
276 TypeSetSerialization(bool class_unload, bool flushpoint, JfrCheckpointWriter* leakp_writer = NULL) : |
277 _leakp_writer(leakp_writer), _elements(0), _class_unload(class_unload), _flushpoint(flushpoint) {} |
277 _leakp_writer(leakp_writer), _elements(0), _class_unload(class_unload), _flushpoint(flushpoint) {} |
278 void write(JfrCheckpointWriter& writer) { |
278 void write(JfrCheckpointWriter& writer) { |
279 MutexLocker cld_lock(SafepointSynchronize::is_at_safepoint() ? NULL : ClassLoaderDataGraph_lock); |
|
280 MutexLocker lock(SafepointSynchronize::is_at_safepoint() ? NULL : Module_lock); |
|
281 _elements = JfrTypeSet::serialize(&writer, _leakp_writer, _class_unload, _flushpoint); |
279 _elements = JfrTypeSet::serialize(&writer, _leakp_writer, _class_unload, _flushpoint); |
282 } |
280 } |
283 size_t elements() const { |
281 size_t elements() const { |
284 return _elements; |
282 return _elements; |
285 } |
283 } |
288 void ClassUnloadTypeSet::serialize(JfrCheckpointWriter& writer) { |
286 void ClassUnloadTypeSet::serialize(JfrCheckpointWriter& writer) { |
289 TypeSetSerialization type_set(true, false); |
287 TypeSetSerialization type_set(true, false); |
290 type_set.write(writer); |
288 type_set.write(writer); |
291 }; |
289 }; |
292 |
290 |
|
291 TypeSet::TypeSet(JfrCheckpointWriter* leakp_writer) : _leakp_writer(leakp_writer) {} |
|
292 |
293 void FlushTypeSet::serialize(JfrCheckpointWriter& writer) { |
293 void FlushTypeSet::serialize(JfrCheckpointWriter& writer) { |
294 assert(!SafepointSynchronize::is_at_safepoint(), "invariant"); |
294 assert(!SafepointSynchronize::is_at_safepoint(), "invariant"); |
295 TypeSetSerialization type_set(false, true); |
295 TypeSetSerialization type_set(false); |
296 type_set.write(writer); |
296 type_set.write(writer, &leakp_writer); |
297 _elements = type_set.elements(); |
297 _elements = type_set.elements(); |
298 } |
298 } |
299 |
299 |
300 size_t FlushTypeSet::elements() const { |
300 size_t FlushTypeSet::elements() const { |
301 return _elements; |
301 return; |
302 } |
|
303 |
302 |
304 TypeSet::TypeSet(JfrCheckpointWriter* leakp_writer) : _leakp_writer(leakp_writer) {} |
303 TypeSet::TypeSet(JfrCheckpointWriter* leakp_writer) : _leakp_writer(leakp_writer) {} |
305 |
304 |
306 void TypeSet::serialize(JfrCheckpointWriter& writer) { |
305 void TypeSet::serialize(JfrCheckpointWriter& writer) { |
307 TypeSetSerialization type_set(false, false, _leakp_writer); |
306 TypeSetSerialization type_set(false, false, _leakp_writer); |