diff options
| author | 2016-04-19 15:56:24 -0700 | |
|---|---|---|
| committer | 2016-04-20 12:30:42 -0700 | |
| commit | 01ab4d62d9779387f7acad96366db6763bfa6a1d (patch) | |
| tree | d7f2796628ab5649bfb23b572c5a0f10aaa6fd7a | |
| parent | eeaaf26805091cad0404bc6030dde38dd4b1edcc (diff) | |
MidiDevice: do not open ports on closed device
Fix involves client side mIsDeviceClosed flag.
Bug: 24949216
Change-Id: I666284a787fbb9a710d2372fb424e8e54f6a2825
Signed-off-by: Phil Burk <philburk@google.com>
| -rw-r--r-- | media/java/android/media/midi/MidiDevice.java | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/media/java/android/media/midi/MidiDevice.java b/media/java/android/media/midi/MidiDevice.java index e4588fe3abc5..da44ca682945 100644 --- a/media/java/android/media/midi/MidiDevice.java +++ b/media/java/android/media/midi/MidiDevice.java @@ -42,6 +42,7 @@ public final class MidiDevice implements Closeable { private final IMidiManager mMidiManager; private final IBinder mClientToken; private final IBinder mDeviceToken; + private boolean mIsDeviceClosed; private final CloseGuard mGuard = CloseGuard.get(); @@ -123,6 +124,9 @@ public final class MidiDevice implements Closeable { * or null in case of failure. */ public MidiInputPort openInputPort(int portNumber) { + if (mIsDeviceClosed) { + return null; + } try { IBinder token = new Binder(); ParcelFileDescriptor pfd = mDeviceServer.openInputPort(token, portNumber); @@ -146,6 +150,9 @@ public final class MidiDevice implements Closeable { * or null in case of failure. */ public MidiOutputPort openOutputPort(int portNumber) { + if (mIsDeviceClosed) { + return null; + } try { IBinder token = new Binder(); ParcelFileDescriptor pfd = mDeviceServer.openOutputPort(token, portNumber); @@ -175,12 +182,15 @@ public final class MidiDevice implements Closeable { if (outputPortNumber < 0 || outputPortNumber >= mDeviceInfo.getOutputPortCount()) { throw new IllegalArgumentException("outputPortNumber out of range"); } + if (mIsDeviceClosed) { + return null; + } ParcelFileDescriptor pfd = inputPort.claimFileDescriptor(); if (pfd == null) { return null; } - try { + try { IBinder token = new Binder(); int calleePid = mDeviceServer.connectPorts(token, pfd, outputPortNumber); // If the service is a different Process then it will duplicate the pfd @@ -202,11 +212,14 @@ public final class MidiDevice implements Closeable { @Override public void close() throws IOException { synchronized (mGuard) { - mGuard.close(); - try { - mMidiManager.closeDevice(mClientToken, mDeviceToken); - } catch (RemoteException e) { - Log.e(TAG, "RemoteException in closeDevice"); + if (!mIsDeviceClosed) { + mGuard.close(); + mIsDeviceClosed = true; + try { + mMidiManager.closeDevice(mClientToken, mDeviceToken); + } catch (RemoteException e) { + Log.e(TAG, "RemoteException in closeDevice"); + } } } } |