summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorSan Mehat <san@google.com>2010-01-12 10:02:40 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2010-01-12 10:02:40 -0800
commitd26707da8965bffb63c55d729f19ddfcb83044b3 (patch)
treea371e18a5b2c5068a08dd750efa34fca5c2ff43f /core
parentf5a84f8a7f91422f698ffbea3fabf77f2f7f77c8 (diff)
parentc93c70c4b849d31ff1b5e5cf2fb9462fd60e5da0 (diff)
downloadframeworks_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.aidl5
-rw-r--r--core/java/android/os/Power.java18
-rw-r--r--core/java/com/android/internal/app/ShutdownThread.java16
-rw-r--r--core/jni/android_os_Power.cpp2
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)