summaryrefslogtreecommitdiff
path: root/openjdkjvmti/events.h
diff options
context:
space:
mode:
author Alex Light <allight@google.com> 2018-01-22 17:45:02 -0800
committer Alex Light <allight@google.com> 2018-01-22 17:45:02 -0800
commit2a96fe8541b7179e923b6edd27dfe1b8ceb6988e (patch)
tree30ebaef5f4540ca7d1b21382b87c7bf9b358cbdb /openjdkjvmti/events.h
parentd78ca5213b780ca3165acb68e44f88f639e8ca45 (diff)
Change envs_lock_ to a ReaderWriterMutex
We were getting a lot of contention on this mutex because it needs to be held to run through the list of all active environments. Since this list is only rarely modified we change the lock to a ReaderWriterMutex and only lock it exclusive when we need to modify it. Test: Examine systrace of startup with DDMS monitor running. Bug: 72336488 Change-Id: Ie161b0f9c624384fcf36272c6edb78c4a7164149
Diffstat (limited to 'openjdkjvmti/events.h')
-rw-r--r--openjdkjvmti/events.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/openjdkjvmti/events.h b/openjdkjvmti/events.h
index 81edb931cd..8141eff88c 100644
--- a/openjdkjvmti/events.h
+++ b/openjdkjvmti/events.h
@@ -283,7 +283,7 @@ class EventHandler {
ALWAYS_INLINE
inline void RecalculateGlobalEventMask(ArtJvmtiEvent event) REQUIRES(!envs_lock_);
ALWAYS_INLINE
- inline void RecalculateGlobalEventMaskLocked(ArtJvmtiEvent event) REQUIRES(envs_lock_);
+ inline void RecalculateGlobalEventMaskLocked(ArtJvmtiEvent event) REQUIRES_SHARED(envs_lock_);
template <ArtJvmtiEvent kEvent>
ALWAYS_INLINE inline void DispatchClassFileLoadHookEvent(art::Thread* thread,
@@ -310,7 +310,8 @@ class EventHandler {
std::list<ArtJvmTiEnv*> envs GUARDED_BY(envs_lock_);
// Top level lock. Nothing at all should be held when we lock this.
- mutable art::Mutex envs_lock_ ACQUIRED_BEFORE(art::Locks::instrument_entrypoints_lock_);
+ mutable art::ReaderWriterMutex envs_lock_
+ ACQUIRED_BEFORE(art::Locks::instrument_entrypoints_lock_);
// A union of all enabled events, anywhere.
EventMask global_mask;