diff options
author | Mathieu Chartier <mathieuc@google.com> | 2014-02-14 16:59:41 -0800 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2014-02-14 18:26:37 -0800 |
commit | e7e8a5fea2d852cccc840fa046151a16627f26cd (patch) | |
tree | 4509736090c371a363e79f4a3d01107d0b8d5e72 /runtime/monitor.cc | |
parent | cc35e45f371f5018b42e2ef383185e2840cf4374 (diff) | |
download | art-e7e8a5fea2d852cccc840fa046151a16627f26cd.tar.gz art-e7e8a5fea2d852cccc840fa046151a16627f26cd.tar.bz2 art-e7e8a5fea2d852cccc840fa046151a16627f26cd.zip |
Remove using mirror::* in jni internal.
Cleans up the code since it helps make it easier to spot moving GC
related bugs.
Also fixed moving GC bugs in MonitorEnter, and FindFieldID.
Change-Id: I794e4fbcc2010875fc6b299c6d4c9fb0f071b71a
Diffstat (limited to 'runtime/monitor.cc')
-rw-r--r-- | runtime/monitor.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/runtime/monitor.cc b/runtime/monitor.cc index 85f3a091cb..64794feb48 100644 --- a/runtime/monitor.cc +++ b/runtime/monitor.cc @@ -650,7 +650,7 @@ void Monitor::InflateThinLocked(Thread* self, SirtRef<mirror::Object>& obj, Lock } } -void Monitor::MonitorEnter(Thread* self, mirror::Object* obj) { +mirror::Object* Monitor::MonitorEnter(Thread* self, mirror::Object* obj) { DCHECK(self != NULL); DCHECK(obj != NULL); uint32_t thread_id = self->GetThreadId(); @@ -663,7 +663,7 @@ void Monitor::MonitorEnter(Thread* self, mirror::Object* obj) { LockWord thin_locked(LockWord::FromThinLockId(thread_id, 0)); if (sirt_obj->CasLockWord(lock_word, thin_locked)) { QuasiAtomic::MembarLoadLoad(); - return; // Success! + return sirt_obj.get(); // Success! } continue; // Go again. } @@ -675,7 +675,7 @@ void Monitor::MonitorEnter(Thread* self, mirror::Object* obj) { if (LIKELY(new_count <= LockWord::kThinLockMaxCount)) { LockWord thin_locked(LockWord::FromThinLockId(thread_id, new_count)); sirt_obj->SetLockWord(thin_locked); - return; // Success! + return sirt_obj.get(); // Success! } else { // We'd overflow the recursion count, so inflate the monitor. InflateThinLocked(self, sirt_obj, lock_word, 0); @@ -696,7 +696,7 @@ void Monitor::MonitorEnter(Thread* self, mirror::Object* obj) { case LockWord::kFatLocked: { Monitor* mon = lock_word.FatLockMonitor(); mon->Lock(self); - return; // Success! + return sirt_obj.get(); // Success! } case LockWord::kHashCode: { // Inflate with the existing hashcode. @@ -705,10 +705,11 @@ void Monitor::MonitorEnter(Thread* self, mirror::Object* obj) { } default: { LOG(FATAL) << "Invalid monitor state " << lock_word.GetState(); - return; + return sirt_obj.get(); } } } + return sirt_obj.get(); } bool Monitor::MonitorExit(Thread* self, mirror::Object* obj) { |