Merge "Add check and throw for failed Intrinsic init."
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index af57507..fd1df92 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -1127,10 +1127,12 @@
/**
* Returns the value associated with the given key, or defaultValue if
- * no mapping of the desired type exists for the given key.
+ * no mapping of the desired type exists for the given key or if a null
+ * value is explicitly associated with the given key.
*
* @param key a String, or null
- * @param defaultValue Value to return if key does not exist
+ * @param defaultValue Value to return if key does not exist or if a null
+ * value is associated with the given key.
* @return the String value associated with the given key, or defaultValue
* if no valid String object is currently mapped to that key.
*/
@@ -1160,10 +1162,12 @@
/**
* Returns the value associated with the given key, or defaultValue if
- * no mapping of the desired type exists for the given key.
+ * no mapping of the desired type exists for the given key or if a null
+ * value is explicitly associatd with the given key.
*
* @param key a String, or null
- * @param defaultValue Value to return if key does not exist
+ * @param defaultValue Value to return if key does not exist or if a null
+ * value is associated with the given key.
* @return the CharSequence value associated with the given key, or defaultValue
* if no valid CharSequence object is currently mapped to that key.
*/
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index 1ffe665..2c828c1e 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -5405,23 +5405,33 @@
return (mError=err);
}
- //printf("Adding new package id %d at index %d\n", id, idx);
- err = mPackageGroups.add(group);
+ err = group->packages.add(package);
if (err < NO_ERROR) {
+ delete group;
+ delete package;
return (mError=err);
}
group->basePackage = package;
+ //printf("Adding new package id %d at index %d\n", id, idx);
+ err = mPackageGroups.add(group);
+ if (err < NO_ERROR) {
+ delete group;
+ return (mError=err);
+ }
+
mPackageMap[id] = (uint8_t)idx;
} else {
group = mPackageGroups.itemAt(idx-1);
if (group == NULL) {
+ delete package;
return (mError=UNKNOWN_ERROR);
}
- }
- err = group->packages.add(package);
- if (err < NO_ERROR) {
- return (mError=err);
+ err = group->packages.add(package);
+ if (err < NO_ERROR) {
+ delete package;
+ return (mError=err);
+ }
}
} else {
LOG_ALWAYS_FATAL("Package id out of range");
diff --git a/rs/java/android/renderscript/FieldPacker.java b/rs/java/android/renderscript/FieldPacker.java
index dccc1ac..9048c31 100644
--- a/rs/java/android/renderscript/FieldPacker.java
+++ b/rs/java/android/renderscript/FieldPacker.java
@@ -37,10 +37,15 @@
}
public FieldPacker(byte[] data) {
- mPos = 0;
+ // Advance mPos to the end of the buffer, since we are copying in the
+ // full data input.
+ mPos = data.length;
mLen = data.length;
mData = data;
mAlignment = new BitSet();
+ // TODO: We should either have an actual FieldPacker copy constructor
+ // or drop support for computing alignment like this. As it stands,
+ // subAlign() can never work correctly for copied FieldPacker objects.
}
public void align(int v) {
diff --git a/rs/jni/android_renderscript_RenderScript.cpp b/rs/jni/android_renderscript_RenderScript.cpp
index af2e3bf..5fe631b 100644
--- a/rs/jni/android_renderscript_RenderScript.cpp
+++ b/rs/jni/android_renderscript_RenderScript.cpp
@@ -1054,7 +1054,7 @@
jint dimsLen = _env->GetArrayLength(dims) * sizeof(int);
jint *dimsPtr = _env->GetIntArrayElements(dims, NULL);
rsScriptSetVarVE((RsContext)con, (RsScript)script, slot, ptr, len, (RsElement)elem,
- (const size_t*) dimsPtr, dimsLen);
+ (const uint32_t*) dimsPtr, dimsLen);
_env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
_env->ReleaseIntArrayElements(dims, dimsPtr, JNI_ABORT);
}
diff --git a/services/java/com/android/server/pm/Installer.java b/services/java/com/android/server/pm/Installer.java
index adf7439..7981a5b 100644
--- a/services/java/com/android/server/pm/Installer.java
+++ b/services/java/com/android/server/pm/Installer.java
@@ -24,6 +24,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.List;
public final class Installer {
private static final String TAG = "Installer";
@@ -335,8 +336,8 @@
}
}
- public int pruneDexCache() {
- return execute("prunedexcache");
+ public int pruneDexCache(String cacheSubDir) {
+ return execute("prunedexcache " + cacheSubDir);
}
public int freeCache(long freeStorageSize) {
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 7d018ba..2d5e357 100755
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -1437,9 +1437,6 @@
// changed. Consider this significant, and wipe away all other
// existing dexopt files to ensure we don't leave any dangling around.
//
- // Additionally, delete all dex files from the root directory
- // since there shouldn't be any there anyway.
- //
// TODO: This should be revisited because it isn't as good an indicator
// as it used to be. It used to include the boot classpath but at some point
// DexFile.isDexOptNeeded started returning false for the boot
@@ -1447,7 +1444,15 @@
// small maintenance release update that the library and tool
// jars may be unchanged but APK could be removed resulting in
// unused dalvik-cache files.
- mInstaller.pruneDexCache();
+ for (String instructionSet : instructionSets) {
+ mInstaller.pruneDexCache(instructionSet);
+ }
+
+ // Additionally, delete all dex files from the root directory
+ // since there shouldn't be any there anyway, unless we're upgrading
+ // from an older OS version or a build that contained the "old" style
+ // flat scheme.
+ mInstaller.pruneDexCache(".");
}
// Collect vendor overlay packages.