30 #include "jfr/recorder/jfrRecorder.hpp"
31 #include "jfr/recorder/checkpoint/jfrCheckpointManager.hpp"
32 #include "jfr/recorder/checkpoint/jfrMetadataEvent.hpp"
33 #include "jfr/recorder/repository/jfrChunkRotation.hpp"
34 #include "jfr/recorder/repository/jfrChunkWriter.hpp"
35 #include "jfr/recorder/repository/jfrRepository.hpp"
36 #include "jfr/recorder/service/jfrPostBox.hpp"
37 #include "jfr/recorder/service/jfrRecorderService.hpp"
38 #include "jfr/recorder/stacktrace/jfrStackTraceRepository.hpp"
39 #include "jfr/recorder/storage/jfrStorage.hpp"
40 #include "jfr/recorder/storage/jfrStorageControl.hpp"
41 #include "jfr/recorder/stringpool/jfrStringPool.hpp"
42 #include "jfr/utilities/jfrAllocation.hpp"
43 #include "jfr/utilities/jfrTime.hpp"
44 #include "jfr/writers/jfrJavaEventWriter.hpp"
45 #include "jfr/utilities/jfrTypes.hpp"
46 #include "logging/log.hpp"
47 #include "memory/resourceArea.hpp"
48 #include "runtime/atomic.hpp"
49 #include "runtime/handles.inline.hpp"
50 #include "runtime/mutexLocker.hpp"
51 #include "runtime/orderAccess.hpp"
52 #include "runtime/os.hpp"
53 #include "runtime/safepoint.hpp"
54 #include "runtime/thread.inline.hpp"
55 #include "runtime/vmOperations.hpp"
56 #include "runtime/vmThread.hpp"
57
58 // set data iff *dest == NULL
59 static bool try_set(void* const data, void** dest, bool clear) {
60 assert(data != NULL, "invariant");
61 const void* const current = OrderAccess::load_acquire(dest);
62 if (current != NULL) {
63 if (current != data) {
64 // already set
65 return false;
66 }
67 assert(current == data, "invariant");
68 if (!clear) {
69 // recursion disallowed
70 return false;
|
30 #include "jfr/recorder/jfrRecorder.hpp"
31 #include "jfr/recorder/checkpoint/jfrCheckpointManager.hpp"
32 #include "jfr/recorder/checkpoint/jfrMetadataEvent.hpp"
33 #include "jfr/recorder/repository/jfrChunkRotation.hpp"
34 #include "jfr/recorder/repository/jfrChunkWriter.hpp"
35 #include "jfr/recorder/repository/jfrRepository.hpp"
36 #include "jfr/recorder/service/jfrPostBox.hpp"
37 #include "jfr/recorder/service/jfrRecorderService.hpp"
38 #include "jfr/recorder/stacktrace/jfrStackTraceRepository.hpp"
39 #include "jfr/recorder/storage/jfrStorage.hpp"
40 #include "jfr/recorder/storage/jfrStorageControl.hpp"
41 #include "jfr/recorder/stringpool/jfrStringPool.hpp"
42 #include "jfr/utilities/jfrAllocation.hpp"
43 #include "jfr/utilities/jfrTime.hpp"
44 #include "jfr/writers/jfrJavaEventWriter.hpp"
45 #include "jfr/utilities/jfrTypes.hpp"
46 #include "logging/log.hpp"
47 #include "memory/resourceArea.hpp"
48 #include "runtime/atomic.hpp"
49 #include "runtime/handles.inline.hpp"
50 #include "runtime/mutexLocker.inline.hpp"
51 #include "runtime/orderAccess.hpp"
52 #include "runtime/os.hpp"
53 #include "runtime/safepoint.hpp"
54 #include "runtime/thread.inline.hpp"
55 #include "runtime/vmOperations.hpp"
56 #include "runtime/vmThread.hpp"
57
58 // set data iff *dest == NULL
59 static bool try_set(void* const data, void** dest, bool clear) {
60 assert(data != NULL, "invariant");
61 const void* const current = OrderAccess::load_acquire(dest);
62 if (current != NULL) {
63 if (current != data) {
64 // already set
65 return false;
66 }
67 assert(current == data, "invariant");
68 if (!clear) {
69 // recursion disallowed
70 return false;
|