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

Commit a9090536 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by android-build-merger
Browse files

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

am: c06f184a

Change-Id: I1f060cb7e20c732e7c6da412e2e9fb7335011ec8
parents 0443d508 c06f184a
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
@@ -25,6 +25,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;
@@ -4030,9 +4031,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.");
@@ -4046,9 +4047,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);
            }
        }

@@ -4056,9 +4057,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
@@ -43,8 +43,10 @@ import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
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;
@@ -426,12 +428,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