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
18944b7aea 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 <mprivozn@redhat.com>
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
This commit is contained in:
Michal Privoznik 2017-06-06 14:45:55 +02:00
parent 836f85d13f
commit 1a4b21f1c6

View File

@ -278,6 +278,15 @@ int virNetClientStreamQueuePacket(virNetClientStreamPtr st,
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. */