OSDN Git Service

Don't crash in dvmQuasiAtomicsShutdown if we never ran dvmQuasiAtomicsStartup.
authorElliott Hughes <enh@google.com>
Wed, 29 Aug 2012 22:46:18 +0000 (15:46 -0700)
committerElliott Hughes <enh@google.com>
Wed, 29 Aug 2012 22:46:18 +0000 (15:46 -0700)
dalvikvm --help would fail here:

  #0  __pthread_mutex_destroy (mutex=0x0) at pthread_mutex_destroy.c:28
  #1  0xf7b36e13 in dvmDestroyMutex (pMutex=0x0) at dalvik/vm/Thread.h:465
  #2  dvmQuasiAtomicsShutdown () at dalvik/vm/Atomic.cpp:188
  #3  0xf7b65781 in dvmShutdown () at dalvik/vm/Init.cpp:1889
  #4  0xf7b65f31 in ~ScopedShutdown (this=<synthetic pointer>, __in_chrg=<optimized out>) at dalvik/vm/Init.cpp:1317
  #5  dvmStartup (argc=11, argv=0x804b360, ignoreUnrecognized=false, pEnv=0x804b398) at dalvik/vm/Init.cpp:1548
  #6  0xf7b790e2 in JNI_CreateJavaVM (p_vm=0xffffc758, p_env=0xffffc75c, vm_args=0xffffc760) at dalvik/vm/Jni.cpp:3502
  #7  0x08048958 in main (argc=13, argv=0xffffc8b8) at dalvik/dalvikvm/Main.cpp:212

Change-Id: I8c833ca5ea454d9b2d1714a569fb728562088659

vm/Atomic.cpp

index ac5d8ac..bd2255b 100644 (file)
@@ -185,7 +185,9 @@ void dvmQuasiAtomicsShutdown() {
     for (size_t i = 0; i < kSwapLockCount; ++i) {
         pthread_mutex_t* m = gSwapLocks[i];
         gSwapLocks[i] = NULL;
-        dvmDestroyMutex(m);
+        if (m != NULL) {
+            dvmDestroyMutex(m);
+        }
         delete m;
     }
 }