OSDN Git Service

am db1597a9: Fix shutdown sequence to avoid SIGSEGV when running am command
authorJohannes Carlsson <johannes.carlsson.x@sonyericsson.com>
Mon, 25 Jun 2012 21:06:56 +0000 (14:06 -0700)
committerAndroid Git Automerger <android-git-automerger@android.com>
Mon, 25 Jun 2012 21:06:56 +0000 (14:06 -0700)
* commit 'db1597a98958b78dc0d8eced19ae1406382b70d6':
  Fix shutdown sequence to avoid SIGSEGV when running am command

libs/binder/IPCThreadState.cpp

index 7a3a3b9..7e416b9 100644 (file)
@@ -758,7 +758,9 @@ finish:
 
 status_t IPCThreadState::talkWithDriver(bool doReceive)
 {
-    ALOG_ASSERT(mProcess->mDriverFD >= 0, "Binder driver is not opened");
+    if (mProcess->mDriverFD <= 0) {
+        return -EBADF;
+    }
     
     binder_write_read bwr;
     
@@ -814,6 +816,9 @@ status_t IPCThreadState::talkWithDriver(bool doReceive)
 #else
         err = INVALID_OPERATION;
 #endif
+        if (mProcess->mDriverFD <= 0) {
+            err = -EBADF;
+        }
         IF_LOG_COMMANDS() {
             alog << "Finished read/write, write size = " << mOut.dataSize() << endl;
         }
@@ -1106,7 +1111,9 @@ void IPCThreadState::threadDestructor(void *st)
        if (self) {
                self->flushCommands();
 #if defined(HAVE_ANDROID_OS)
-        ioctl(self->mProcess->mDriverFD, BINDER_THREAD_EXIT, 0);
+        if (self->mProcess->mDriverFD > 0) {
+            ioctl(self->mProcess->mDriverFD, BINDER_THREAD_EXIT, 0);
+        }
 #endif
                delete self;
        }