diff options
author | San Mehat <san@google.com> | 2010-01-12 10:02:40 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-01-12 10:02:40 -0800 |
commit | d26707da8965bffb63c55d729f19ddfcb83044b3 (patch) | |
tree | a371e18a5b2c5068a08dd750efa34fca5c2ff43f /core | |
parent | f5a84f8a7f91422f698ffbea3fabf77f2f7f77c8 (diff) | |
parent | c93c70c4b849d31ff1b5e5cf2fb9462fd60e5da0 (diff) | |
download | frameworks_base-d26707da8965bffb63c55d729f19ddfcb83044b3.zip frameworks_base-d26707da8965bffb63c55d729f19ddfcb83044b3.tar.gz frameworks_base-d26707da8965bffb63c55d729f19ddfcb83044b3.tar.bz2 |
am c93c70c4: Merge "framework: storage: Ensure that filesystems are unmounted before shutdown/reboot" into eclair
Merge commit 'c93c70c4b849d31ff1b5e5cf2fb9462fd60e5da0' into eclair-plus-aosp
* commit 'c93c70c4b849d31ff1b5e5cf2fb9462fd60e5da0':
framework: storage: Ensure that filesystems are unmounted before shutdown/reboot
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/os/IMountService.aidl | 5 | ||||
-rw-r--r-- | core/java/android/os/Power.java | 18 | ||||
-rw-r--r-- | core/java/com/android/internal/app/ShutdownThread.java | 16 | ||||
-rw-r--r-- | core/jni/android_os_Power.cpp | 2 |
4 files changed, 39 insertions, 2 deletions
diff --git a/core/java/android/os/IMountService.aidl b/core/java/android/os/IMountService.aidl index 96d44b6..4491a8a 100644 --- a/core/java/android/os/IMountService.aidl +++ b/core/java/android/os/IMountService.aidl @@ -75,4 +75,9 @@ interface IMountService * when a UMS host is detected. */ void setAutoStartUms(boolean value); + + /** + * Shuts down the MountService and gracefully unmounts all external media. + */ + void shutdown(); } diff --git a/core/java/android/os/Power.java b/core/java/android/os/Power.java index 3679e47..bc76180 100644 --- a/core/java/android/os/Power.java +++ b/core/java/android/os/Power.java @@ -17,6 +17,8 @@ package android.os; import java.io.IOException; +import android.os.ServiceManager; +import android.os.IMountService; /** * Class that provides access to some of the power management functions. @@ -97,5 +99,19 @@ public class Power * @throws IOException if reboot fails for some reason (eg, lack of * permission) */ - public static native void reboot(String reason) throws IOException; + public static void reboot(String reason) throws IOException + { + IMountService mSvc = IMountService.Stub.asInterface( + ServiceManager.getService("mount")); + + if (mSvc != null) { + try { + mSvc.shutdown(); + } catch (Exception e) { + } + } + rebootNative(reason); + } + + private static native void rebootNative(String reason) throws IOException ; } diff --git a/core/java/com/android/internal/app/ShutdownThread.java b/core/java/com/android/internal/app/ShutdownThread.java index 2060cf8..c110f95 100644 --- a/core/java/com/android/internal/app/ShutdownThread.java +++ b/core/java/com/android/internal/app/ShutdownThread.java @@ -32,6 +32,7 @@ import android.os.RemoteException; import android.os.Power; import android.os.ServiceManager; import android.os.SystemClock; +import android.os.IMountService; import com.android.internal.telephony.ITelephony; import android.util.Log; @@ -189,6 +190,10 @@ public final class ShutdownThread extends Thread { final IBluetooth bluetooth = IBluetooth.Stub.asInterface(ServiceManager.checkService( BluetoothAdapter.BLUETOOTH_SERVICE)); + + final IMountService mount = + IMountService.Stub.asInterface( + ServiceManager.checkService("mount")); try { bluetoothOff = bluetooth == null || @@ -241,6 +246,17 @@ public final class ShutdownThread extends Thread { SystemClock.sleep(PHONE_STATE_POLL_SLEEP_MSEC); } + // Shutdown MountService to ensure media is in a safe state + try { + if (mount != null) { + mount.shutdown(); + } else { + Log.w(TAG, "MountService unavailable for shutdown"); + } + } catch (Exception e) { + Log.e(TAG, "Exception during MountService shutdown", e); + } + //shutdown power Log.i(TAG, "Performing low-level shutdown..."); Power.shutdown(); diff --git a/core/jni/android_os_Power.cpp b/core/jni/android_os_Power.cpp index df5edba..a46c2dd 100644 --- a/core/jni/android_os_Power.cpp +++ b/core/jni/android_os_Power.cpp @@ -105,7 +105,7 @@ static JNINativeMethod method_table[] = { { "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout }, { "setScreenState", "(Z)I", (void*)setScreenState }, { "shutdown", "()V", (void*)android_os_Power_shutdown }, - { "reboot", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot }, + { "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot }, }; int register_android_os_Power(JNIEnv *env) |