Snap for 8917908 from bc6b2273d6e29a6323937fe49857bdf366fb7d2a to mainline-cellbroadcast-release

Change-Id: I853ae9f0c710705bc3b24bd7942d1a675b1bc223
diff --git a/JavaLibrary.bp b/JavaLibrary.bp
index 79521ba..f070571 100644
--- a/JavaLibrary.bp
+++ b/JavaLibrary.bp
@@ -919,6 +919,10 @@
         "//build/soong/java/core-libraries",
         "//frameworks/base",
         "//frameworks/base/api",
+
+        // DO NOT REMOVE: Legacy visibility, needed for snapshots that are
+        // generated for the S build.
+        "//libcore/mmodules/core_platform_api",
     ],
     srcs: [
         ":core_oj_api_files",
diff --git a/dalvik/src/main/java/dalvik/system/ZygoteHooks.java b/dalvik/src/main/java/dalvik/system/ZygoteHooks.java
index bfe1945..296e18d 100644
--- a/dalvik/src/main/java/dalvik/system/ZygoteHooks.java
+++ b/dalvik/src/main/java/dalvik/system/ZygoteHooks.java
@@ -192,7 +192,9 @@
 
         // Enable memory-mapped coverage if JaCoCo is in the boot classpath. system_server is
         // skipped due to being persistent and having its own coverage writing mechanism.
-        if (!isSystemServer && enableMemoryMappedDataMethod != null) {
+        // Child zygote processes are also skipped so that file descriptors are not kept open
+        // when the child zygote process forks again.
+        if (!isSystemServer && !isChildZygote && enableMemoryMappedDataMethod != null) {
           try {
             enableMemoryMappedDataMethod.invoke(null);
           } catch (ReflectiveOperationException e) {
diff --git a/ojluni/src/main/java/java/util/concurrent/FutureTask.java b/ojluni/src/main/java/java/util/concurrent/FutureTask.java
index e913ef3..4263944 100644
--- a/ojluni/src/main/java/java/util/concurrent/FutureTask.java
+++ b/ojluni/src/main/java/java/util/concurrent/FutureTask.java
@@ -507,10 +507,15 @@
             status = "[Cancelled]";
             break;
         default:
+            // BEGIN Android-changed: recursion risk building string (b/241297967)
+            /*
             final Callable<?> callable = this.callable;
             status = (callable == null)
                 ? "[Not completed]"
                 : "[Not completed, task = " + callable + "]";
+            */
+            status = "[Not completed]";
+            // END Android-changed: recursion risk building string (b/241297967)
         }
         return super.toString() + status;
     }