MTP: Fix problem with MTP starting up on the first try.

BUG: 3361230

Change-Id: Ibc2e8adf24a14ea18385b306e786a77983ff8f5b
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp
index 241f18a..4693ec5c 100644
--- a/media/jni/android_mtp_MtpServer.cpp
+++ b/media/jni/android_mtp_MtpServer.cpp
@@ -62,6 +62,7 @@
     String8         mStoragePath;
     uint64_t        mReserveSpace;
     jobject         mJavaServer;
+    bool            mDone;
     int             mFd;
 
 public:
@@ -72,6 +73,7 @@
             mStoragePath(storagePath),
             mReserveSpace(reserveSpace),
             mJavaServer(javaServer),
+            mDone(false),
             mFd(-1)
     {
     }
@@ -104,12 +106,17 @@
 
         mServer = new MtpServer(mFd, mDatabase, AID_MEDIA_RW, 0664, 0775);
         mServer->addStorage(mStoragePath, mReserveSpace);
-        sMutex.unlock();
 
-        LOGD("MtpThread mServer->run");
-        mServer->run();
+        while (!mDone) {
+            sMutex.unlock();
 
-        sMutex.lock();
+            LOGD("MtpThread mServer->run");
+            mServer->run();
+            sleep(1);
+
+            sMutex.lock();
+        }
+
         close(mFd);
         mFd = -1;
         delete mServer;
@@ -124,6 +131,12 @@
         return false;
     }
 
+    void stop() {
+        sMutex.lock();
+        mDone = true;
+        sMutex.unlock();
+    }
+
     void sendObjectAdded(MtpObjectHandle handle) {
         sMutex.lock();
         if (mServer)
@@ -181,6 +194,9 @@
 {
 #ifdef HAVE_ANDROID_OS
     LOGD("stop\n");
+    MtpThread *thread = (MtpThread *)env->GetIntField(thiz, field_context);
+    if (thread)
+        thread->stop();
 #endif
 }
 
@@ -212,7 +228,7 @@
     MtpThread *thread = (MtpThread *)env->GetIntField(thiz, field_context);
     if (thread)
         thread->setPtpMode(usePtp);
- #endif
+#endif
 }
 
 // ----------------------------------------------------------------------------