Move ThreadDeath event before clearing Thread.nativePeer

We were clearing the Thread.nativePeer field prior to calling
ThreadDeath event. Since this event can call into user-supplied code
we want to call it before we do any real cleanup.

Test: ./test.py --host -j40
Bug: 62117833

Change-Id: I6b93d82d23946c07dfbeb837d841339108e4b084
diff --git a/runtime/thread.cc b/runtime/thread.cc
index 36ecd33..fc30832 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -2134,6 +2134,10 @@
     ScopedObjectAccess soa(self);
     // We may need to call user-supplied managed code, do this before final clean-up.
     HandleUncaughtExceptions(soa);
+    Runtime* runtime = Runtime::Current();
+    if (runtime != nullptr) {
+      runtime->GetRuntimeCallbacks()->ThreadDeath(self);
+    }
     RemoveFromThreadGroup(soa);
 
     // this.nativePeer = 0;
@@ -2144,11 +2148,6 @@
       jni::DecodeArtField(WellKnownClasses::java_lang_Thread_nativePeer)
           ->SetLong<false>(tlsPtr_.opeer, 0);
     }
-    Runtime* runtime = Runtime::Current();
-    if (runtime != nullptr) {
-      runtime->GetRuntimeCallbacks()->ThreadDeath(self);
-    }
-
 
     // Thread.join() is implemented as an Object.wait() on the Thread.lock object. Signal anyone
     // who is waiting.