Re: [PATCH] Fix tracking of RPC messages wrt streams

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09/01/2011 12:48 AM, Daniel P. Berrange wrote:
From: "Daniel P. Berrange"<berrange@xxxxxxxxxx>

Commit 2c85644b0b51fbe5b6244e6773531af29933a727 attempted to
fix a problem with tracking RPC messages from streams by doing

-            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--;

In other words any stream packet, with status NET_OK or NET_ERROR
would cause nrequests to be decremented. This is great if the
packet from from a synchronous virStreamFinish or virStreamAbort
API call, but wildly wrong if from a server initiated abort.
The latter resulted in 'nrequests' being decremented below zero.
This then causes all I/O for that client to be stopped.

Instead of trying to infer whether we need to decrement the
nrequests field, from the message type/status, introduce an
explicit 'bool tracked' field to mark whether the virNetMessagePtr
object is subject to tracking.

Also add a virNetMessageClear function to allow a message
contents to be cleared out, without adversely impacting the
'tracked' field as a naive memset() would do

* src/rpc/virnetmessage.c, src/rpc/virnetmessage.h: Add
   a 'bool tracked' field and virNetMessageClear() API
* daemon/remote.c, daemon/stream.c, src/rpc/virnetclientprogram.c,
   src/rpc/virnetclientstream.c, src/rpc/virnetserverclient.c,
   src/rpc/virnetserverprogram.c: Switch over to use
   virNetMessageClear() and pass in the 'bool tracked' value
   when creating messages.
---
  daemon/remote.c               |    2 +-
  daemon/stream.c               |   10 +++++-----
  src/rpc/virnetclientprogram.c |    2 +-
  src/rpc/virnetclientstream.c  |    4 ++--
  src/rpc/virnetmessage.c       |   14 ++++++++++++--
  src/rpc/virnetmessage.h       |    6 +++++-
  src/rpc/virnetserverclient.c  |   12 +++++-------
  src/rpc/virnetserverprogram.c |    2 +-
  8 files changed, 32 insertions(+), 20 deletions(-)


       I tested it ,the fix resolved the problem.

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]