daemonStreamHandleWrite(virNetServerClient *client,
daemonClientStream *stream)
{
+ virNetMessageStatus status = VIR_NET_OK;
VIR_DEBUG("client=%p, stream=%p", client, stream);
while (stream->rx && !stream->closed) {
- virNetMessage *msg = stream->rx;
+ virNetMessage *msg = virNetMessageQueueServe(&stream->rx);
int ret;
if (msg->header.type == VIR_NET_STREAM_HOLE) {
* data. */
ret = daemonStreamHandleHole(client, stream, msg);
} else if (msg->header.type == VIR_NET_STREAM) {
- switch (msg->header.status) {
+ status = msg->header.status;
+ switch (status) {
case VIR_NET_OK:
ret = daemonStreamHandleFinish(client, stream, msg);
break;
if (ret > 0)
break; /* still processing data from msg */
- virNetMessageQueueServe(&stream->rx);
if (ret < 0) {
virNetMessageFree(msg);
virNetServerClientImmediateClose(client);
* onto the wire, but this causes the client to reset
* its active request count / throttling
*/
- if (msg->header.status == VIR_NET_CONTINUE) {
+ if (status == VIR_NET_CONTINUE) {
virNetMessageClear(msg);
msg->header.type = VIR_NET_REPLY;
if (virNetServerClientSendMessage(client, msg) < 0) {