libvirt/daemon
Daniel P. Berrange b3fb288e52 Fix tracking of RPC messages wrt streams
Commit 2c85644b0b 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.
2011-09-01 10:52:35 +01:00
..
.gitignore build: don't require pod2man for tarball builds 2011-02-21 09:27:05 -07:00
libvirtd.aug Allow certificate sanity checking to be disabled 2011-07-22 15:18:32 +01:00
libvirtd.c daemon: Move TLS initialization to virInitialize 2011-08-25 10:22:03 +02:00
libvirtd.conf Fix typos in daemon config file from previous commit 2011-07-22 15:19:59 +01:00
libvirtd.h build: work around older systemtap header 2011-08-22 06:57:16 -06:00
libvirtd.init.in libvirtd.init.in: stop/restart() - wrong return value in case of failure 2011-08-15 15:44:39 +08:00
libvirtd.logrotate.in Add logrotate support for libvirtd.log 2011-03-04 22:43:55 +08:00
libvirtd.lxc.logrotate.in Change logrotate to be per-hypervisor logs 2010-03-10 11:27:02 +01:00
libvirtd.pod.in docs: removed outdated reference to virt-mem 2010-11-23 01:11:10 +11:00
libvirtd.policy-0 Rename qemud/ directory to daemon/ 2009-09-21 14:41:42 +01:00
libvirtd.policy-1 Rename qemud/ directory to daemon/ 2009-09-21 14:41:42 +01:00
libvirtd.qemu.logrotate.in Change logrotate to be per-hypervisor logs 2010-03-10 11:27:02 +01:00
libvirtd.sasl Rename qemud/ directory to daemon/ 2009-09-21 14:41:42 +01:00
libvirtd.stp Include socket address in client probe data 2010-10-22 12:00:45 +01:00
libvirtd.sysconf daemon: sysconf: Update comment about VNC audio 2010-05-26 10:51:36 -04:00
libvirtd.uml.logrotate.in Change logrotate to be per-hypervisor logs 2010-03-10 11:27:02 +01:00
libvirtd.upstart Experimental libvirtd upstart job 2011-04-18 11:38:30 +02:00
Makefile.am freebsd: Fix build problem due to picking up the wrong libvirt.h 2011-07-29 07:35:54 -06:00
probes.d Include socket address in client probe data 2010-10-22 12:00:45 +01:00
remote.c Fix tracking of RPC messages wrt streams 2011-09-01 10:52:35 +01:00
remote.h Remove unused virNetServerProgramErrorHander typedef 2011-07-13 11:47:01 +01:00
stream.c Fix tracking of RPC messages wrt streams 2011-09-01 10:52:35 +01:00
stream.h Ensure client streams are closed when marking a client for close 2011-08-16 14:38:11 -07:00
test_libvirtd.aug Allow certificate sanity checking to be disabled 2011-07-22 15:18:32 +01:00
THREADS.txt maint: use consistent file name for threading notes 2011-05-31 13:54:45 -06:00