Use r/w Mutex to control access to jvmtiEnv event information.

We were previously relying on the mutator_lock_ to provide
synchronization when accessing control information for some jvmti
events. This was not fully thread safe. To fix this problem we
instead use a ReaderWriterMutex to control access to this data.

Refactorings to allow all methods to have appropriate lock annotations
will follow in later CL (see bug).

Performance Impact:
    Tested performance by running main piece of test 993 10 times.
    Printing redirected to /dev/null.
    Total of ~270 breakpoints are executed.

    Before: 2.62 seconds / run
    After:  2.72 seconds / run

Test: ./test.py --host -j50
Test: ./art/tools/run-prebuilt-libjdwp-tests.sh --debug

Bug: 62821960
Bug: 67958496
Bug: 67962439

Change-Id: Ib2935c2e10bc2113e8430b49a9a7b76144e4235e
diff --git a/openjdkjvmti/ti_field.cc b/openjdkjvmti/ti_field.cc
index c45b926..b869183 100644
--- a/openjdkjvmti/ti_field.cc
+++ b/openjdkjvmti/ti_field.cc
@@ -189,6 +189,7 @@
 
 jvmtiError FieldUtil::SetFieldModificationWatch(jvmtiEnv* jenv, jclass klass, jfieldID field) {
   ArtJvmTiEnv* env = ArtJvmTiEnv::AsArtJvmTiEnv(jenv);
+  art::WriterMutexLock lk(art::Thread::Current(), env->event_info_mutex_);
   if (klass == nullptr) {
     return ERR(INVALID_CLASS);
   }
@@ -205,6 +206,7 @@
 
 jvmtiError FieldUtil::ClearFieldModificationWatch(jvmtiEnv* jenv, jclass klass, jfieldID field) {
   ArtJvmTiEnv* env = ArtJvmTiEnv::AsArtJvmTiEnv(jenv);
+  art::WriterMutexLock lk(art::Thread::Current(), env->event_info_mutex_);
   if (klass == nullptr) {
     return ERR(INVALID_CLASS);
   }
@@ -221,6 +223,7 @@
 
 jvmtiError FieldUtil::SetFieldAccessWatch(jvmtiEnv* jenv, jclass klass, jfieldID field) {
   ArtJvmTiEnv* env = ArtJvmTiEnv::AsArtJvmTiEnv(jenv);
+  art::WriterMutexLock lk(art::Thread::Current(), env->event_info_mutex_);
   if (klass == nullptr) {
     return ERR(INVALID_CLASS);
   }
@@ -237,6 +240,7 @@
 
 jvmtiError FieldUtil::ClearFieldAccessWatch(jvmtiEnv* jenv, jclass klass, jfieldID field) {
   ArtJvmTiEnv* env = ArtJvmTiEnv::AsArtJvmTiEnv(jenv);
+  art::WriterMutexLock lk(art::Thread::Current(), env->event_info_mutex_);
   if (klass == nullptr) {
     return ERR(INVALID_CLASS);
   }