Merge "Revert "Remove a misleading "flush" function.""
This commit is contained in:
@@ -75,4 +75,16 @@ import java.io.OutputStream;
|
|||||||
}
|
}
|
||||||
mSocket.write(b, offset, count);
|
mSocket.write(b, offset, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait until the data in sending queue is emptied. A polling version
|
||||||
|
* for flush implementation. Use it to ensure the writing data afterwards will
|
||||||
|
* be packed in the new RFCOMM frame.
|
||||||
|
*
|
||||||
|
* @throws IOException if an i/o error occurs.
|
||||||
|
* @since Android 4.2.3
|
||||||
|
*/
|
||||||
|
public void flush() throws IOException {
|
||||||
|
mSocket.flush();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -515,6 +515,20 @@ public final class BluetoothSocket implements Closeable {
|
|||||||
return mSocketIS.available();
|
return mSocketIS.available();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait until the data in sending queue is emptied. A polling version
|
||||||
|
* for flush implementation. Used to ensure the writing data afterwards will
|
||||||
|
* be packed in new RFCOMM frame.
|
||||||
|
*
|
||||||
|
* @throws IOException if an i/o error occurs.
|
||||||
|
*/
|
||||||
|
@UnsupportedAppUsage
|
||||||
|
/*package*/ void flush() throws IOException {
|
||||||
|
if (mSocketOS == null) throw new IOException("flush is called on null OutputStream");
|
||||||
|
if (VDBG) Log.d(TAG, "flush: " + mSocketOS);
|
||||||
|
mSocketOS.flush();
|
||||||
|
}
|
||||||
|
|
||||||
/*package*/ int read(byte[] b, int offset, int length) throws IOException {
|
/*package*/ int read(byte[] b, int offset, int length) throws IOException {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
if (VDBG) Log.d(TAG, "read in: " + mSocketIS + " len: " + length);
|
if (VDBG) Log.d(TAG, "read in: " + mSocketIS + " len: " + length);
|
||||||
|
|||||||
@@ -157,6 +157,40 @@ class LocalSocketImpl
|
|||||||
write_native(b, myFd);
|
write_native(b, myFd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait until the data in sending queue is emptied. A polling version
|
||||||
|
* for flush implementation.
|
||||||
|
* @throws IOException
|
||||||
|
* if an i/o error occurs.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void flush() throws IOException {
|
||||||
|
FileDescriptor myFd = fd;
|
||||||
|
if (myFd == null) throw new IOException("socket closed");
|
||||||
|
|
||||||
|
// Loop until the output buffer is empty.
|
||||||
|
Int32Ref pending = new Int32Ref(0);
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
// See linux/net/unix/af_unix.c
|
||||||
|
Os.ioctlInt(myFd, OsConstants.TIOCOUTQ, pending);
|
||||||
|
} catch (ErrnoException e) {
|
||||||
|
throw e.rethrowAsIOException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pending.value <= 0) {
|
||||||
|
// The output buffer is empty.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Thread.sleep(10);
|
||||||
|
} catch (InterruptedException ie) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private native int read_native(FileDescriptor fd) throws IOException;
|
private native int read_native(FileDescriptor fd) throws IOException;
|
||||||
|
|||||||
@@ -25,12 +25,15 @@ import android.os.PowerManager;
|
|||||||
import android.os.RecoverySystem;
|
import android.os.RecoverySystem;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.SystemProperties;
|
import android.os.SystemProperties;
|
||||||
|
import android.system.ErrnoException;
|
||||||
|
import android.system.Os;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
import libcore.io.IoUtils;
|
import libcore.io.IoUtils;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@@ -285,6 +288,7 @@ public final class RecoverySystemService extends SystemService {
|
|||||||
byte[] cmdUtf8 = command.getBytes("UTF-8");
|
byte[] cmdUtf8 = command.getBytes("UTF-8");
|
||||||
dos.writeInt(cmdUtf8.length);
|
dos.writeInt(cmdUtf8.length);
|
||||||
dos.write(cmdUtf8, 0, cmdUtf8.length);
|
dos.write(cmdUtf8, 0, cmdUtf8.length);
|
||||||
|
dos.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the status from the socket.
|
// Read the status from the socket.
|
||||||
|
|||||||
@@ -2082,6 +2082,7 @@ public class Vpn {
|
|||||||
}
|
}
|
||||||
out.write(0xFF);
|
out.write(0xFF);
|
||||||
out.write(0xFF);
|
out.write(0xFF);
|
||||||
|
out.flush();
|
||||||
|
|
||||||
// Wait for End-of-File.
|
// Wait for End-of-File.
|
||||||
InputStream in = mSockets[i].getInputStream();
|
InputStream in = mSockets[i].getInputStream();
|
||||||
|
|||||||
Reference in New Issue
Block a user