Avoid debug check violation in thread registration.

Bug: 13757855
Change-Id: Ied83a7fc43e2b9a89a8b99aa4f74069ef8a369b1
diff --git a/runtime/thread.cc b/runtime/thread.cc
index b802882..29d011c 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -598,12 +598,14 @@
 }
 
 void Thread::ModifySuspendCount(Thread* self, int delta, bool for_debugger) {
-  DCHECK(delta == -1 || delta == +1 || delta == -tls32_.debug_suspend_count)
-      << delta << " " << tls32_.debug_suspend_count << " " << this;
-  DCHECK_GE(tls32_.suspend_count, tls32_.debug_suspend_count) << this;
-  Locks::thread_suspend_count_lock_->AssertHeld(self);
-  if (this != self && !IsSuspended()) {
-    Locks::thread_list_lock_->AssertHeld(self);
+  if (kIsDebugBuild) {
+    DCHECK(delta == -1 || delta == +1 || delta == -tls32_.debug_suspend_count)
+          << delta << " " << tls32_.debug_suspend_count << " " << this;
+    DCHECK_GE(tls32_.suspend_count, tls32_.debug_suspend_count) << this;
+    Locks::thread_suspend_count_lock_->AssertHeld(self);
+    if (this != self && !IsSuspended()) {
+      Locks::thread_list_lock_->AssertHeld(self);
+    }
   }
   if (UNLIKELY(delta < 0 && tls32_.suspend_count <= 0)) {
     UnsafeLogFatalForSuspendCount(self, this);
diff --git a/runtime/thread_list.cc b/runtime/thread_list.cc
index 0933780..7de9433 100644
--- a/runtime/thread_list.cc
+++ b/runtime/thread_list.cc
@@ -750,14 +750,13 @@
   MutexLock mu(self, *Locks::thread_list_lock_);
   MutexLock mu2(self, *Locks::thread_suspend_count_lock_);
   CHECK_GE(suspend_all_count_, debug_suspend_all_count_);
-  if (debug_suspend_all_count_ > 0) {
-    self->ModifySuspendCount(self, debug_suspend_all_count_, true);
+  // Modify suspend count in increments of 1 to maintain invariants in ModifySuspendCount. While
+  // this isn't particularly efficient the suspend counts are most commonly 0 or 1.
+  for (int delta = debug_suspend_all_count_; delta > 0; delta--) {
+    self->ModifySuspendCount(self, +1, true);
   }
-  if (suspend_all_count_ > 0) {
-    int delta = suspend_all_count_ - debug_suspend_all_count_;
-    if (delta > 0) {
-      self->ModifySuspendCount(self, delta, false);
-    }
+  for (int delta = suspend_all_count_ - debug_suspend_all_count_; delta > 0; delta--) {
+    self->ModifySuspendCount(self, +1, false);
   }
   CHECK(!Contains(self));
   list_.push_back(self);