1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

Fix release of outgoing stream confirmation/abort message

When sending back the final OK or ERROR message on completion
of a stream, we were not decrementing the 'nrequests' tracker
on the client. With the default requests limit of '5', this
meant once a client had created 5 streams, they are unable to
process any further RPC calls.  There was also a bug when
handling an error from decoding a message length header, which
meant a client connection would not immediately be closed.

* src/rpc/virnetserverclient.c: Fix release of request after
  stream completion & mark client for close on error
This commit is contained in:
Daniel P. Berrange 2011-07-08 12:37:22 +01:00
parent 927dfcf693
commit 2c85644b0b

View File

@ -700,8 +700,10 @@ readmore:
/* Either done with length word header */ /* Either done with length word header */
if (client->rx->bufferLength == VIR_NET_MESSAGE_LEN_MAX) { if (client->rx->bufferLength == VIR_NET_MESSAGE_LEN_MAX) {
if (virNetMessageDecodeLength(client->rx) < 0) if (virNetMessageDecodeLength(client->rx) < 0) {
client->wantClose = true;
return; return;
}
virNetServerClientUpdateEvent(client); virNetServerClientUpdateEvent(client);
@ -831,7 +833,9 @@ virNetServerClientDispatchWrite(virNetServerClientPtr client)
/* Get finished msg from head of tx queue */ /* Get finished msg from head of tx queue */
msg = virNetMessageQueueServe(&client->tx); msg = virNetMessageQueueServe(&client->tx);
if (msg->header.type == VIR_NET_REPLY) { if (msg->header.type == VIR_NET_REPLY ||
(msg->header.type == VIR_NET_STREAM &&
msg->header.status != VIR_NET_CONTINUE)) {
client->nrequests--; client->nrequests--;
/* See if the recv queue is currently throttled */ /* See if the recv queue is currently throttled */
if (!client->rx && if (!client->rx &&