Teach the framework to use the new android_reboot() function.
The new android_reboot() function is a nicer way to reboot.
It can optionally sync(2) and remount as read-only writable
filesystems. This fixes bug 3350709.
Change-Id: I792fa3f726f8d685a696f52cf760e731567ed8d4
diff --git a/core/jni/android_os_Power.cpp b/core/jni/android_os_Power.cpp
index a46c2dd..5cfb9b1 100644
--- a/core/jni/android_os_Power.cpp
+++ b/core/jni/android_os_Power.cpp
@@ -20,7 +20,7 @@
#include "android_runtime/AndroidRuntime.h"
#include <utils/misc.h>
#include <hardware_legacy/power.h>
-#include <sys/reboot.h>
+#include <cutils/android_reboot.h>
namespace android
{
@@ -77,25 +77,26 @@
static void android_os_Power_shutdown(JNIEnv *env, jobject clazz)
{
- sync();
#ifdef HAVE_ANDROID_OS
- reboot(RB_POWER_OFF);
+ android_reboot(ANDROID_RB_POWEROFF, 0, 0);
+#else
+ sync();
#endif
}
static void android_os_Power_reboot(JNIEnv *env, jobject clazz, jstring reason)
{
- sync();
#ifdef HAVE_ANDROID_OS
if (reason == NULL) {
- reboot(RB_AUTOBOOT);
+ android_reboot(ANDROID_RB_RESTART, 0, 0);
} else {
const char *chars = env->GetStringUTFChars(reason, NULL);
- __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
- LINUX_REBOOT_CMD_RESTART2, (char*) chars);
+ android_reboot(ANDROID_RB_RESTART2, 0, (char *) chars);
env->ReleaseStringUTFChars(reason, chars); // In case it fails.
}
jniThrowIOException(env, errno);
+#else
+ sync();
#endif
}