Loading core/java/com/android/internal/os/TransferPipe.java +20 −10 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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() { Loading @@ -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); Loading @@ -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(); } } Loading @@ -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(); } } Loading Loading @@ -173,6 +178,11 @@ public final class TransferPipe implements Runnable { } } @Override public void close() { kill(); } public void kill() { synchronized (this) { closeFd(0); Loading location/java/android/location/IFusedProvider.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -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. * Loading services/core/java/com/android/server/InputMethodManagerService.java +10 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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."); Loading @@ -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); } } Loading @@ -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."); Loading services/core/java/com/android/server/NetworkScoreService.java +5 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading services/core/java/com/android/server/location/LocationProviderProxy.java +5 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading
core/java/com/android/internal/os/TransferPipe.java +20 −10 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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() { Loading @@ -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); Loading @@ -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(); } } Loading @@ -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(); } } Loading Loading @@ -173,6 +178,11 @@ public final class TransferPipe implements Runnable { } } @Override public void close() { kill(); } public void kill() { synchronized (this) { closeFd(0); Loading
location/java/android/location/IFusedProvider.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -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. * Loading
services/core/java/com/android/server/InputMethodManagerService.java +10 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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."); Loading @@ -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); } } Loading @@ -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."); Loading
services/core/java/com/android/server/NetworkScoreService.java +5 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading
services/core/java/com/android/server/location/LocationProviderProxy.java +5 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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