commit 1a4b21f1c67a3ddf39d11bba39c1dee869131636 Author: Michal Privoznik Date: Tue Jun 6 14:45:55 2017 +0200 virNetClientStreamQueuePacket: Set st->incomingEOF on the end of stream While reworking client side of streams, I had to postpone payload decoding so that stream holes and stream data can be distinguished in virNetClientStreamRecvPacket. That's merely what 18944b7aea46d does. However, I accidentally removed one important bit: when server sends us an empty STREAM packet (with no payload) - meaning end of stream - st->incomingEOF flag needs to be set. It used to be before I touched the code. After I removed it, virNetClientStreamRecvPacket will try to fetch more data from the stream, but it will never come. Signed-off-by: Michal Privoznik Reviewed-by: Jim Fehlig Index: libvirt-3.4.0/src/rpc/virnetclientstream.c =================================================================== --- libvirt-3.4.0.orig/src/rpc/virnetclientstream.c +++ libvirt-3.4.0/src/rpc/virnetclientstream.c @@ -278,6 +278,15 @@ int virNetClientStreamQueuePacket(virNet VIR_DEBUG("Incoming stream message: stream=%p message=%p", st, msg); + if (msg->bufferLength == msg->bufferOffset) { + /* No payload means end of the stream. */ + virObjectLock(st); + st->incomingEOF = true; + virNetClientStreamEventTimerUpdate(st); + virObjectUnlock(st); + return 0; + } + /* Unfortunately, we must allocate new message as the one we * get in @msg is going to be cleared later in the process. */