diff options
author | 2023-08-15 17:56:07 +0000 | |
---|---|---|
committer | 2023-08-23 22:06:46 +0000 | |
commit | 996cbb566a5521ca3b0653007e7921469f58981a (patch) | |
tree | c515682fbe53afe605b39e3d0ab2aa09e3d59ad8 /runtime/native/java_lang_Thread.cc | |
parent | 9e5a197ee85b35e0e95fa48316f1a87e1d9232e5 (diff) |
Revert^12 "Thread suspension cleanup and deadlock fix"
This reverts commit b6f3b439d4f12e89393ba8101eea8671c94ba237.
PS1: Identical to aosp/2652371 .
PS2: Introduce kSuspensionImmune to disable suspension of a thread
that is being relied upon to execute ResumeAll(). This replaces
the test in SuspendAll() to check whether the caller was being asked
to suspend itself. That test was deadlock-prone, since a SuspendAll
request from e.g. the GC to block, and GC progress might be required
to resume the thread running the GC.
Since SuspendAll() now only loops for a single reason, we no longer
need to track why we looped.
Reduce the number of iterations in each 129-ThreadGetId thread
drammatically.
PS3: Address reviewer comments, including fixing a newly introduced
bug in CheckSuspend(). Fix 129-GetThreadId by drammatically reducing
the iteration count when we appear to be running slowly, which is
normally the case for gcstress. Earlier versions of this CL were
apparently also failing on this test, but the failure was hidden by
other failures. This mostly undoes the PS2 change to this test, now
that the failure is better understood.
PS4: Rebase.
PS5: Fix 129-GetThreadId code formatting.
PS6: Address more reviewer comments related to 129-GetThreadId.
PS7: Remove DCHECK in EnsureFlipFunctionStarted. It was unsafe,
since the thread may no longer be around.
Test: Treehugger.
Bug: 240742796
Bug: 203363895
Bug: 238032384
Bug: 253671779
Bug: 276660630
Bug: 295880862
Bug: 294334417
(and more)
Change-Id: I99260fdc4feb9bcdc8b8b566e40912532f1a4937
Diffstat (limited to 'runtime/native/java_lang_Thread.cc')
-rw-r--r-- | runtime/native/java_lang_Thread.cc | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/runtime/native/java_lang_Thread.cc b/runtime/native/java_lang_Thread.cc index 570c554782..fd67a0a7fa 100644 --- a/runtime/native/java_lang_Thread.cc +++ b/runtime/native/java_lang_Thread.cc @@ -147,11 +147,8 @@ static void Thread_setNativeName(JNIEnv* env, jobject peer, jstring java_name) { // thread list lock to avoid this, as setting the thread name causes mutator to lock/unlock // in the DDMS send code. ThreadList* thread_list = Runtime::Current()->GetThreadList(); - bool timed_out; // Take suspend thread lock to avoid races with threads trying to suspend this one. - Thread* thread = thread_list->SuspendThreadByPeer(peer, - SuspendReason::kInternal, - &timed_out); + Thread* thread = thread_list->SuspendThreadByPeer(peer, SuspendReason::kInternal); if (thread != nullptr) { { ScopedObjectAccess soa(env); @@ -159,9 +156,6 @@ static void Thread_setNativeName(JNIEnv* env, jobject peer, jstring java_name) { } bool resumed = thread_list->Resume(thread, SuspendReason::kInternal); DCHECK(resumed); - } else if (timed_out) { - LOG(ERROR) << "Trying to set thread name to '" << name.c_str() << "' failed as the thread " - "failed to suspend within a generous timeout."; } } |