Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a010d0a authored by Sebastien Hertz's avatar Sebastien Hertz Committed by Android (Google) Code Review
Browse files

Merge "Allow debugging only for apps forked from zygote" into mnc-dev

parents 96695d2f 7a09b832
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -304,9 +304,9 @@ int main(int argc, char* const argv[])
    }

    if (zygote) {
        runtime.start("com.android.internal.os.ZygoteInit", args);
        runtime.start("com.android.internal.os.ZygoteInit", args, zygote);
    } else if (className) {
        runtime.start("com.android.internal.os.RuntimeInit", args);
        runtime.start("com.android.internal.os.RuntimeInit", args, zygote);
    } else {
        fprintf(stderr, "Error: no class name or --zygote supplied.\n");
        app_usage();
+10 −6
Original line number Diff line number Diff line
@@ -566,7 +566,7 @@ bool AndroidRuntime::parseCompilerRuntimeOption(const char* property,
 *
 * Returns 0 on success.
 */
int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote)
{
    JavaVMInitArgs initArgs;
    char propBuf[PROPERTY_VALUE_MAX];
@@ -702,9 +702,13 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
    parseRuntimeOption("dalvik.vm.gctype", gctypeOptsBuf, "-Xgc:");
    parseRuntimeOption("dalvik.vm.backgroundgctype", backgroundgcOptsBuf, "-XX:BackgroundGC=");

    /* enable debugging; set suspend=y to pause during VM init */
    /* use android ADB transport */
    /*
     * Enable debugging only for apps forked from zygote.
     * Set suspend=y to pause during VM init and use android ADB transport.
     */
    if (zygote) {
      addOption("-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y");
    }

    parseRuntimeOption("dalvik.vm.lockprof.threshold",
                       lockProfThresholdBuf,
@@ -1000,7 +1004,7 @@ jstring AndroidRuntime::NewStringLatin1(JNIEnv* env, const char* bytes) {
 * Passes the main function two arguments, the class name and the specified
 * options string.
 */
void AndroidRuntime::start(const char* className, const Vector<String8>& options)
void AndroidRuntime::start(const char* className, const Vector<String8>& options, bool zygote)
{
    ALOGD(">>>>>> START %s uid %d <<<<<<\n",
            className != NULL ? className : "(unknown)", getuid());
@@ -1036,7 +1040,7 @@ void AndroidRuntime::start(const char* className, const Vector<String8>& options
    JniInvocation jni_invocation;
    jni_invocation.Init(NULL);
    JNIEnv* env;
    if (startVm(&mJavaVM, &env) != 0) {
    if (startVm(&mJavaVM, &env, zygote) != 0) {
        return;
    }
    onVmCreated(env);
+2 −2
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ public:
     */
    static jclass findClass(JNIEnv* env, const char* className);

    void start(const char *classname, const Vector<String8>& options);
    void start(const char *classname, const Vector<String8>& options, bool zygote);

    void exit(int code);

@@ -131,7 +131,7 @@ private:
                                    const char* runtimeArg,
                                    const char* quotingArg);
    void parseExtraOpts(char* extraOptsBuf, const char* quotingArg);
    int startVm(JavaVM** pJavaVM, JNIEnv** pEnv);
    int startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote);

    Vector<JavaVMOption> mOptions;
    bool mExitWithoutCleanup;