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
}
// ----------------------------------------------------------------------------