Index: content/public/android/java/src/org/chromium/content/app/ChildProcessService.java |
diff --git a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java |
index 1e175a753a0ec9215f1719b9bf5a899fb44b5b20..46c1bf16edc862bf55a4546028f7ef697555d273 100644 |
--- a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java |
+++ b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java |
@@ -130,6 +130,14 @@ public class ChildProcessService extends Service { |
@Override |
public void run() { |
try { |
+ // CommandLine must be initialized before others, e.g., Linker.isUsed() |
+ // may check the command line options. |
+ synchronized (mMainThread) { |
+ while (mCommandLineParams == null) { |
+ mMainThread.wait(); |
+ } |
+ } |
+ CommandLine.init(mCommandLineParams); |
boolean useLinker = Linker.isUsed(); |
boolean requestedSharedRelro = false; |
if (useLinker) { |
@@ -138,23 +146,16 @@ public class ChildProcessService extends Service { |
mMainThread.wait(); |
} |
} |
- if (mLinkerParams != null) { |
- if (mLinkerParams.mWaitForSharedRelro) { |
- requestedSharedRelro = true; |
- Linker.initServiceProcess(mLinkerParams.mBaseLoadAddress); |
- } else { |
- Linker.disableSharedRelros(); |
- } |
- Linker.setTestRunnerClassName(mLinkerParams.mTestRunnerClassName); |
+ assert mLinkerParams != null; |
+ if (mLinkerParams.mWaitForSharedRelro) { |
+ requestedSharedRelro = true; |
+ Linker.initServiceProcess(mLinkerParams.mBaseLoadAddress); |
+ } else { |
+ Linker.disableSharedRelros(); |
} |
+ Linker.setTestRunnerClassName(mLinkerParams.mTestRunnerClassName); |
} |
boolean isLoaded = false; |
- synchronized (mMainThread) { |
- while (mCommandLineParams == null) { |
- mMainThread.wait(); |
- } |
- } |
- CommandLine.init(mCommandLineParams); |
if (CommandLine.getInstance().hasSwitch( |
BaseSwitches.RENDERER_WAIT_FOR_JAVA_DEBUGGER)) { |
android.os.Debug.waitForDebugger(); |
@@ -254,9 +255,9 @@ public class ChildProcessService extends Service { |
synchronized (mMainThread) { |
mCommandLineParams = intent.getStringArrayExtra( |
ChildProcessConnection.EXTRA_COMMAND_LINE); |
- mLinkerParams = null; |
- if (Linker.isUsed()) |
- mLinkerParams = new ChromiumLinkerParams(intent); |
+ // mLinkerParams is never used if Linker.isUsed() returns false. |
+ // See onCreate(). |
+ mLinkerParams = new ChromiumLinkerParams(intent); |
mIsBound = true; |
mMainThread.notifyAll(); |
} |