Remove failing thread suspend DCHECK

Removes a failing DCHECK in process_reader_win.cc caused by a race
condition with a thread being injected into a process whose existing
threads are already suspended.

Bug: chromium:1007013
Change-Id: I61b6823e6ec0583e591097cd7d7f55eb88369600
Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2047803
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
GitOrigin-RevId: ff1036aa601703a3c55b8c3fce07295c5acedb9d
diff --git a/snapshot/win/process_reader_win.cc b/snapshot/win/process_reader_win.cc
index 16280e9..51940c0 100644
--- a/snapshot/win/process_reader_win.cc
+++ b/snapshot/win/process_reader_win.cc
@@ -151,11 +151,17 @@
       PLOG(ERROR) << "SuspendThread";
       return false;
     }
-    DCHECK(previous_suspend_count > 0 ||
-           suspension_state == ProcessSuspensionState::kRunning);
-    thread->suspend_count =
-        previous_suspend_count -
-        (suspension_state == ProcessSuspensionState::kSuspended ? 1 : 0);
+    if (previous_suspend_count <= 0 &&
+        suspension_state == ProcessSuspensionState::kSuspended) {
+      LOG(WARNING) << "Thread " << thread->id
+                   << " should be suspended, but previous_suspend_count is "
+                   << previous_suspend_count;
+      thread->suspend_count = 0;
+    } else {
+      thread->suspend_count =
+          previous_suspend_count -
+          (suspension_state == ProcessSuspensionState::kSuspended ? 1 : 0);
+    }
 
     memset(&thread->context, 0, sizeof(thread->context));
 #if defined(ARCH_CPU_32_BITS)