summaryrefslogtreecommitdiff
path: root/media/jni/android_mtp_MtpServer.cpp
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@android.com>2011-01-18 20:11:29 -0800
committerMike Lockwood <lockwood@android.com>2011-01-18 20:11:29 -0800
commita1c9180461a819f0515ec92a72d8ebfe462d977f (patch)
tree27943b0d34a5c547fc1675beb5365abaa3ee6349 /media/jni/android_mtp_MtpServer.cpp
parent5f31aa30cdf104dc10c2a503d7846178d6aa79cb (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.cpp26
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
}
// ----------------------------------------------------------------------------