am 5b0f193d: Merge "PreInitializeNativeBridge only if its Available" into lmp-mr1-dev

* commit '5b0f193d25218557a23bdd7b4ee44d6932b71115':
  PreInitializeNativeBridge only if its Available
This commit is contained in:
Calin Juravle
2014-10-29 22:50:34 +00:00
committed by Android Git Automerger

View File

@@ -436,6 +436,10 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
pid_t pid = fork(); pid_t pid = fork();
if (pid == 0) { if (pid == 0) {
if (!is_system_server && dataDir == NULL) {
ALOGE("Application private dir cannot be null");
RuntimeAbort(env);
}
// The child process. // The child process.
gMallocLeakZygoteChild = 1; gMallocLeakZygoteChild = 1;
@@ -452,14 +456,15 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
DropCapabilitiesBoundingSet(env); DropCapabilitiesBoundingSet(env);
bool need_native_bridge = false; bool use_native_bridge = !is_system_server && (instructionSet != NULL)
if (instructionSet != NULL) { && android::NativeBridgeAvailable();
if (use_native_bridge) {
ScopedUtfChars isa_string(env, instructionSet); ScopedUtfChars isa_string(env, instructionSet);
need_native_bridge = android::NeedsNativeBridge(isa_string.c_str()); use_native_bridge = android::NeedsNativeBridge(isa_string.c_str());
} }
if (!MountEmulatedStorage(uid, mount_external, need_native_bridge)) { if (!MountEmulatedStorage(uid, mount_external, use_native_bridge)) {
ALOGW("Failed to mount emulated storage: %d", errno); ALOGW("Failed to mount emulated storage: %s", strerror(errno));
if (errno == ENOTCONN || errno == EROFS) { if (errno == ENOTCONN || errno == EROFS) {
// When device is actively encrypting, we get ENOTCONN here // When device is actively encrypting, we get ENOTCONN here
// since FUSE was mounted before the framework restarted. // since FUSE was mounted before the framework restarted.
@@ -487,15 +492,10 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
SetRLimits(env, javaRlimits); SetRLimits(env, javaRlimits);
if (!is_system_server && need_native_bridge) { if (use_native_bridge) {
// Set the environment for the apps running with native bridge. ScopedUtfChars isa_string(env, instructionSet);
ScopedUtfChars isa_string(env, instructionSet); // Known non-null because of need_native_... ScopedUtfChars data_dir(env, dataDir);
if (dataDir == NULL) { android::PreInitializeNativeBridge(data_dir.c_str(), isa_string.c_str());
android::PreInitializeNativeBridge(NULL, isa_string.c_str());
} else {
ScopedUtfChars data_dir(env, dataDir);
android::PreInitializeNativeBridge(data_dir.c_str(), isa_string.c_str());
}
} }
int rc = setresgid(gid, gid, gid); int rc = setresgid(gid, gid, gid);