Index: content/public/android/java/src/org/chromium/content/browser/ChildConnectionAllocator.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildConnectionAllocator.java b/content/public/android/java/src/org/chromium/content/browser/ChildConnectionAllocator.java |
index 7e3e9db222d281aa43e2b9ac7679af1990edf1db..e5ce2438bc40c8432148e45ea72ce3a768f9751a 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/ChildConnectionAllocator.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildConnectionAllocator.java |
@@ -18,6 +18,7 @@ import org.chromium.content.app.PrivilegedProcessService; |
import org.chromium.content.app.SandboxedProcessService; |
import java.util.ArrayList; |
+import java.util.Arrays; |
import java.util.HashMap; |
import java.util.LinkedList; |
import java.util.Map; |
@@ -191,8 +192,9 @@ public class ChildConnectionAllocator { |
} |
int slot = mFreeConnectionIndices.remove(0); |
assert mChildProcessConnections[slot] == null; |
- mChildProcessConnections[slot] = mConnectionFactory.create(spawnData.getContext(), slot, |
- mInSandbox, deathCallback, mChildClassName, childProcessCommonParameters, |
+ String serviceClassName = mChildClassName + slot; |
+ mChildProcessConnections[slot] = mConnectionFactory.create(spawnData.getContext(), |
+ mInSandbox, deathCallback, serviceClassName, childProcessCommonParameters, |
spawnData.getCreationParams()); |
Log.d(TAG, "Allocator allocated a connection, sandbox: %b, slot: %d", mInSandbox, slot); |
return mChildProcessConnections[slot]; |
@@ -201,15 +203,11 @@ public class ChildConnectionAllocator { |
// Also return the first ChildSpawnData in the pending queue, if any. |
public ChildSpawnData free(BaseChildProcessConnection connection) { |
assert LauncherThread.runningOnLauncherThread(); |
- int slot = connection.getServiceNumber(); |
- if (mChildProcessConnections[slot] != connection) { |
- int occupier = mChildProcessConnections[slot] == null |
- ? -1 |
- : mChildProcessConnections[slot].getServiceNumber(); |
- Log.e(TAG, |
- "Unable to find connection to free in slot: %d " |
- + "already occupied by service: %d", |
- slot, occupier); |
+ // mChildProcessConnections is relatively short (20 items at max at this point). |
+ // We are better of iterating than caching in a map. |
+ int slot = Arrays.asList(mChildProcessConnections).indexOf(connection); |
+ if (slot == -1) { |
+ Log.e(TAG, "Unable to find connection to free."); |
assert false; |
} else { |
mChildProcessConnections[slot] = null; |