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

Commit c4f65e0d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move dump() to dumpAsync(), more oneway calls."

parents 3775a39e 850c83e6
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.os;

import java.io.Closeable;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -32,13 +33,13 @@ import android.util.Slog;
/**
 * Helper for transferring data through a pipe from a client app.
 */
public final class TransferPipe implements Runnable {
public final class TransferPipe implements Runnable, Closeable {
    static final String TAG = "TransferPipe";
    static final boolean DEBUG = false;

    static final long DEFAULT_TIMEOUT = 5000;  // 5 seconds

    final Thread mThread;;
    final Thread mThread;
    final ParcelFileDescriptor[] mFds;

    FileDescriptor mOutFd;
@@ -54,8 +55,13 @@ public final class TransferPipe implements Runnable {
    }

    public TransferPipe() throws IOException {
        this(null);
    }

    public TransferPipe(String bufferPrefix) throws IOException {
        mThread = new Thread(this, "TransferPipe");
        mFds = ParcelFileDescriptor.createPipe();
        mBufferPrefix = bufferPrefix;
    }

    ParcelFileDescriptor getReadFd() {
@@ -70,6 +76,11 @@ public final class TransferPipe implements Runnable {
        mBufferPrefix = prefix;
    }

    public static void dumpAsync(IBinder binder, FileDescriptor out, String[] args)
            throws IOException, RemoteException {
        goDump(binder, out, args);
    }

    static void go(Caller caller, IInterface iface, FileDescriptor out,
            String prefix, String[] args) throws IOException, RemoteException {
        go(caller, iface, out, prefix, args, DEFAULT_TIMEOUT);
@@ -86,12 +97,9 @@ public final class TransferPipe implements Runnable {
            return;
        }

        TransferPipe tp = new TransferPipe();
        try {
        try (TransferPipe tp = new TransferPipe()) {
            caller.go(iface, tp.getWriteFd().getFileDescriptor(), prefix, args);
            tp.go(out, timeout);
        } finally {
            tp.kill();
        }
    }

@@ -111,12 +119,9 @@ public final class TransferPipe implements Runnable {
            return;
        }

        TransferPipe tp = new TransferPipe();
        try {
        try (TransferPipe tp = new TransferPipe()) {
            binder.dumpAsync(tp.getWriteFd().getFileDescriptor(), args);
            tp.go(out, timeout);
        } finally {
            tp.kill();
        }
    }

@@ -173,6 +178,11 @@ public final class TransferPipe implements Runnable {
        }
    }

    @Override
    public void close() {
        kill();
    }

    public void kill() {
        synchronized (this) {
            closeFd(0);
+2 −2
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ import android.hardware.location.IFusedLocationHardware;
 * Interface definition for Location providers that require FLP services.
 * @hide
 */
interface IFusedProvider {
oneway interface IFusedProvider {
    /**
     * Provides access to a FusedLocationHardware instance needed for the provider to work.
     *
+10 −9
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.internal.inputmethod.InputMethodUtils;
import com.android.internal.inputmethod.InputMethodUtils.InputMethodSettings;
import com.android.internal.os.HandlerCaller;
import com.android.internal.os.SomeArgs;
import com.android.internal.os.TransferPipe;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.view.IInputContext;
import com.android.internal.view.IInputMethod;
@@ -4041,9 +4042,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
        if (client != null) {
            pw.flush();
            try {
                client.client.asBinder().dump(fd, args);
            } catch (RemoteException e) {
                p.println("Input method client dead: " + e);
                TransferPipe.dumpAsync(client.client.asBinder(), fd, args);
            } catch (IOException | RemoteException e) {
                p.println("Failed to dump input method client: " + e);
            }
        } else {
            p.println("No input method client.");
@@ -4057,9 +4058,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
            p.println(" ");
            pw.flush();
            try {
                focusedWindowClient.client.asBinder().dump(fd, args);
            } catch (RemoteException e) {
                p.println("Input method client in focused window dead: " + e);
                TransferPipe.dumpAsync(focusedWindowClient.client.asBinder(), fd, args);
            } catch (IOException | RemoteException e) {
                p.println("Failed to dump input method client in focused window: " + e);
            }
        }

@@ -4067,9 +4068,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
        if (method != null) {
            pw.flush();
            try {
                method.asBinder().dump(fd, args);
            } catch (RemoteException e) {
                p.println("Input method service dead: " + e);
                TransferPipe.dumpAsync(method.asBinder(), fd, args);
            } catch (IOException | RemoteException e) {
                p.println("Failed to dump input method service: " + e);
            }
        } else {
            p.println("No input method service.");
+5 −6
Original line number Diff line number Diff line
@@ -42,8 +42,10 @@ import android.util.Log;
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.content.PackageMonitor;
import com.android.internal.os.TransferPipe;

import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
@@ -418,12 +420,9 @@ public class NetworkScoreService extends INetworkScoreService.Stub {

        for (INetworkScoreCache scoreCache : getScoreCaches()) {
            try {
                scoreCache.asBinder().dump(fd, args);
            } catch (RemoteException e) {
                writer.println("Unable to dump score cache");
                if (Log.isLoggable(TAG, Log.VERBOSE)) {
                    Log.v(TAG, "Unable to dump score cache", e);
                }
                TransferPipe.dumpAsync(scoreCache.asBinder(), fd, args);
            } catch (IOException | RemoteException e) {
                writer.println("Failed to dump score cache: " + e);
            }
        }
        if (mServiceConnection != null) {
+5 −8
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.location;

import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;

import android.content.Context;
@@ -30,6 +31,7 @@ import android.util.Log;
import com.android.internal.location.ProviderProperties;
import com.android.internal.location.ILocationProvider;
import com.android.internal.location.ProviderRequest;
import com.android.internal.os.TransferPipe;
import com.android.server.LocationManagerService;
import com.android.server.ServiceWatcher;

@@ -230,14 +232,9 @@ public class LocationProviderProxy implements LocationProviderInterface {
        pw.flush();

        try {
            service.asBinder().dump(fd, args);
        } catch (RemoteException e) {
            pw.println("service down (RemoteException)");
            Log.w(TAG, e);
        } catch (Exception e) {
            pw.println("service down (Exception)");
            // never let remote service crash system server
            Log.e(TAG, "Exception from " + mServiceWatcher.getBestPackageName(), e);
            TransferPipe.dumpAsync(service.asBinder(), fd, args);
        } catch (IOException | RemoteException e) {
            pw.println("Failed to dump location provider: " + e);
        }
    }

Loading