diff options
author | 2017-10-31 22:29:21 +0000 | |
---|---|---|
committer | 2017-10-31 22:29:21 +0000 | |
commit | a2cbb2b0723a3fa05cc44e13cbe90543b3236883 (patch) | |
tree | 1db9efcd8bcece516b6f5cbb48cf5f00ba7c1796 /openjdkjvmti/ti_thread.cc | |
parent | 62540e3cc58abde95e147210d584614651d858b5 (diff) | |
parent | e5179ce0ca8becf34ba6e7b2f3988874fe647c26 (diff) |
Merge "Revert "Prevent races with GC when transferring objects between threads""
Diffstat (limited to 'openjdkjvmti/ti_thread.cc')
-rw-r--r-- | openjdkjvmti/ti_thread.cc | 30 |
1 files changed, 1 insertions, 29 deletions
diff --git a/openjdkjvmti/ti_thread.cc b/openjdkjvmti/ti_thread.cc index 6d075a6b7b..99dea540e5 100644 --- a/openjdkjvmti/ti_thread.cc +++ b/openjdkjvmti/ti_thread.cc @@ -38,9 +38,6 @@ #include "base/mutex.h" #include "events-inl.h" #include "gc/system_weak.h" -#include "gc/collector_type.h" -#include "gc/gc_cause.h" -#include "gc/scoped_gc_critical_section.h" #include "gc_root-inl.h" #include "jni_internal.h" #include "mirror/class.h" @@ -1064,7 +1061,7 @@ jvmtiError ThreadUtil::StopThread(jvmtiEnv* env ATTRIBUTE_UNUSED, }; StopThreadClosure c(exc); // RequestSynchronousCheckpoint releases the thread_list_lock_ as a part of its execution. - if (RequestGCSafeSynchronousCheckpoint(target, &c)) { + if (target->RequestSynchronousCheckpoint(&c)) { return OK; } else { // Something went wrong, probably the thread died. @@ -1087,29 +1084,4 @@ jvmtiError ThreadUtil::InterruptThread(jvmtiEnv* env ATTRIBUTE_UNUSED, jthread t return OK; } -class GcCriticalSectionClosure : public art::Closure { - public: - explicit GcCriticalSectionClosure(art::Closure* wrapped) : wrapped_(wrapped) {} - - void Run(art::Thread* self) OVERRIDE { - if (art::kIsDebugBuild) { - art::Locks::thread_list_lock_->AssertNotHeld(art::Thread::Current()); - } - // This might block as it waits for any in-progress GCs to finish but this is fine since we - // released the Thread-list-lock prior to calling this in RequestSynchronousCheckpoint. - art::gc::ScopedGCCriticalSection sgccs(art::Thread::Current(), - art::gc::kGcCauseDebugger, - art::gc::kCollectorTypeDebugger); - wrapped_->Run(self); - } - - private: - art::Closure* wrapped_; -}; - -bool ThreadUtil::RequestGCSafeSynchronousCheckpoint(art::Thread* thr, art::Closure* function) { - GcCriticalSectionClosure gccsc(function); - return thr->RequestSynchronousCheckpoint(&gccsc); -} - } // namespace openjdkjvmti |