Switch to Thread::WalkStack rather than manual Frame::Next.

Also fix test 039.

Change-Id: I07d0559bb86d67a7f7947768bd8370fb4cf06c26
diff --git a/src/jni_internal.cc b/src/jni_internal.cc
index c5ffec1..3bbd3cd 100644
--- a/src/jni_internal.cc
+++ b/src/jni_internal.cc
@@ -356,8 +356,7 @@
 }
 
 static const ClassLoader* GetClassLoader(Thread* self) {
-  Frame frame = self->GetTopOfStack();
-  Method* method = frame.GetMethod();
+  Method* method = self->GetCurrentMethod();
   if (method == NULL || PrettyMethod(method, false) == "java.lang.Runtime.nativeLoad") {
     return self->GetClassLoaderOverride();
   }
@@ -2655,11 +2654,10 @@
   static jint DestroyJavaVM(JavaVM* vm) {
     if (vm == NULL) {
       return JNI_ERR;
-    } else {
-      JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
-      delete raw_vm->runtime;
-      return JNI_OK;
     }
+    JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
+    delete raw_vm->runtime;
+    return JNI_OK;
   }
 
   static jint AttachCurrentThread(JavaVM* vm, JNIEnv** p_env, void* thr_args) {
@@ -2673,12 +2671,11 @@
   static jint DetachCurrentThread(JavaVM* vm) {
     if (vm == NULL) {
       return JNI_ERR;
-    } else {
-      JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
-      Runtime* runtime = raw_vm->runtime;
-      runtime->DetachCurrentThread();
-      return JNI_OK;
     }
+    JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
+    Runtime* runtime = raw_vm->runtime;
+    runtime->DetachCurrentThread();
+    return JNI_OK;
   }
 
   static jint GetEnv(JavaVM* vm, void** env, jint version) {