summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Phil Burk <philburk@google.com> 2016-04-19 15:56:24 -0700
committer Phil Burk <philburk@google.com> 2016-04-20 12:30:42 -0700
commit01ab4d62d9779387f7acad96366db6763bfa6a1d (patch)
treed7f2796628ab5649bfb23b572c5a0f10aaa6fd7a
parenteeaaf26805091cad0404bc6030dde38dd4b1edcc (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.java25
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");
+ }
}
}
}