27 #include "jfr/recorder/checkpoint/jfrMetadataEvent.hpp" |
27 #include "jfr/recorder/checkpoint/jfrMetadataEvent.hpp" |
28 #include "jfr/recorder/repository/jfrChunkWriter.hpp" |
28 #include "jfr/recorder/repository/jfrChunkWriter.hpp" |
29 #include "oops/klass.inline.hpp" |
29 #include "oops/klass.inline.hpp" |
30 #include "oops/oop.inline.hpp" |
30 #include "oops/oop.inline.hpp" |
31 #include "oops/typeArrayOop.inline.hpp" |
31 #include "oops/typeArrayOop.inline.hpp" |
|
32 #include "runtime/semaphore.hpp" |
32 #include "runtime/thread.inline.hpp" |
33 #include "runtime/thread.inline.hpp" |
33 |
34 |
34 static jbyteArray _metadata_blob = NULL; |
35 static jbyteArray _metadata_blob = NULL; |
35 static u8 metadata_id = 0; |
36 static u8 metadata_id = 0; |
36 static u8 last_written_metadata_id = 0; |
37 static u8 last_written_metadata_id = 0; |
|
38 static Semaphore metadata_mutex_semaphore(1); |
|
39 |
|
40 void JfrMetadataEvent::lock() { |
|
41 metadata_mutex_semaphore.wait(); |
|
42 } |
|
43 |
|
44 void JfrMetadataEvent::unlock() { |
|
45 metadata_mutex_semaphore.signal(); |
|
46 } |
37 |
47 |
38 static void write_metadata_blob(JfrChunkWriter& chunkwriter, jbyteArray metadata_blob) { |
48 static void write_metadata_blob(JfrChunkWriter& chunkwriter, jbyteArray metadata_blob) { |
39 if (metadata_blob != NULL) { |
49 if (metadata_blob != NULL) { |
40 const typeArrayOop arr = (typeArrayOop)JfrJavaSupport::resolve_non_null(metadata_blob); |
50 const typeArrayOop arr = (typeArrayOop)JfrJavaSupport::resolve_non_null(metadata_blob); |
41 assert(arr != NULL, "invariant"); |
51 assert(arr != NULL, "invariant"); |