diff options
author | Mike Lockwood <lockwood@android.com> | 2011-01-18 20:11:29 -0800 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2011-01-18 20:11:29 -0800 |
commit | a1c9180461a819f0515ec92a72d8ebfe462d977f (patch) | |
tree | 27943b0d34a5c547fc1675beb5365abaa3ee6349 /media/jni/android_mtp_MtpServer.cpp | |
parent | 5f31aa30cdf104dc10c2a503d7846178d6aa79cb (diff) |
MTP: Fix problem with MTP starting up on the first try.
BUG: 3361230
Change-Id: Ibc2e8adf24a14ea18385b306e786a77983ff8f5b
Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'media/jni/android_mtp_MtpServer.cpp')
-rw-r--r-- | media/jni/android_mtp_MtpServer.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp index 241f18a0d2e8..4693ec5c768d 100644 --- a/media/jni/android_mtp_MtpServer.cpp +++ b/media/jni/android_mtp_MtpServer.cpp @@ -62,6 +62,7 @@ private: String8 mStoragePath; uint64_t mReserveSpace; jobject mJavaServer; + bool mDone; int mFd; public: @@ -72,6 +73,7 @@ public: mStoragePath(storagePath), mReserveSpace(reserveSpace), mJavaServer(javaServer), + mDone(false), mFd(-1) { } @@ -104,12 +106,17 @@ public: 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(); + + LOGD("MtpThread mServer->run"); + mServer->run(); + sleep(1); + + sMutex.lock(); + } - sMutex.lock(); close(mFd); mFd = -1; delete mServer; @@ -124,6 +131,12 @@ public: return false; } + void stop() { + sMutex.lock(); + mDone = true; + sMutex.unlock(); + } + void sendObjectAdded(MtpObjectHandle handle) { sMutex.lock(); if (mServer) @@ -181,6 +194,9 @@ android_mtp_MtpServer_stop(JNIEnv *env, jobject thiz) { #ifdef HAVE_ANDROID_OS LOGD("stop\n"); + MtpThread *thread = (MtpThread *)env->GetIntField(thiz, field_context); + if (thread) + thread->stop(); #endif } @@ -212,7 +228,7 @@ android_mtp_MtpServer_set_ptp_mode(JNIEnv *env, jobject thiz, jboolean usePtp) MtpThread *thread = (MtpThread *)env->GetIntField(thiz, field_context); if (thread) thread->setPtpMode(usePtp); - #endif +#endif } // ---------------------------------------------------------------------------- |