| Index: runtime/bin/socket_stream.dart
|
| diff --git a/runtime/bin/socket_stream.dart b/runtime/bin/socket_stream.dart
|
| index 2368bc5c62c465df888c749a2038028d4f09b256..7bcd72e84700e5ee401fd7ee7025f4b7c2ed02d8 100644
|
| --- a/runtime/bin/socket_stream.dart
|
| +++ b/runtime/bin/socket_stream.dart
|
| @@ -97,16 +97,19 @@ class SocketInputStream implements InputStream {
|
| void readUntil(List<int> pattern, void callback(List<int> resultBuffer)) {
|
| void doRead() {
|
| List<int> newBuffer;
|
| - if (_buffer != null) {
|
| - newBuffer = _buffer;
|
| - } else {
|
| - int size = _socket.available();
|
| - List<int> buffer = new List<int>(size);
|
| - int result = _socket.readList(buffer, 0, size);
|
| + int available = _socket.available();
|
| + if (available > 0) {
|
| + List<int> buffer = new List<int>(available);
|
| + int result = _socket.readList(buffer, 0, buffer.length);
|
| if (result > 0) {
|
| // TODO(hpayer): Avoid copying of data before pattern matching.
|
| newBuffer = _getBufferedData(buffer, result);
|
| }
|
| + } else if (_buffer != null) {
|
| + newBuffer = _buffer;
|
| + } else {
|
| + _socket.setDataHandler(doRead);
|
| + return;
|
| }
|
|
|
| int index = _matchPattern(newBuffer, pattern, 0);
|
|
|