summaryrefslogtreecommitdiff
path: root/runtime/native/java_lang_Thread.cc
diff options
context:
space:
mode:
author Hans Boehm <hboehm@google.com> 2023-08-15 17:56:07 +0000
committer Hans Boehm <hboehm@google.com> 2023-08-23 22:06:46 +0000
commit996cbb566a5521ca3b0653007e7921469f58981a (patch)
treec515682fbe53afe605b39e3d0ab2aa09e3d59ad8 /runtime/native/java_lang_Thread.cc
parent9e5a197ee85b35e0e95fa48316f1a87e1d9232e5 (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.cc8
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.";
}
}