diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SyncLink.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SyncLink.java index 94281d21c9d..493964a26c1 100755 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SyncLink.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SyncLink.java @@ -371,7 +371,7 @@ public class SyncLink implements Link { // Pull source in loop while (!shutdown) { // Pull data from source element and send it to sink element - ByteBuffer data = pull(true); + ByteBuffer data = pull(false); if (data != null) sink.handleData(data, this); diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java index 02983492e8d..5d3d65bdc0c 100755 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java @@ -101,20 +101,23 @@ public class AprSocketSource extends BaseElement { if (verbose) System.out.println("[" + this + "] INFO: Reading data from stream."); + // to unblock during reboot + long startTime = System.currentTimeMillis(); // FIXME: If pull is destroyed or socket is closed, segfault will happen here int actualLength = (block) ? // Blocking read Socket.recv(socket, buf.data, buf.offset, buf.data.length - buf.offset) : // Non-blocking read - Socket.recvt(socket, buf.data, buf.offset, buf.data.length - buf.offset, 1); + Socket.recvt(socket, buf.data, buf.offset, buf.data.length - buf.offset, 5000000); if (socketWrapper.shutdown) { socketWrapper.destroyPull(); return; } - if (actualLength < 0) { + long elapsedTime = System.currentTimeMillis() - startTime; + if (actualLength < 0 || elapsedTime > 5000) { if (verbose) - System.out.println("[" + this + "] INFO: End of stream."); + System.out.println("[" + this + "] INFO: End of stream or timeout"); buf.unref(); closeStream();