[libvirt] [PATCH v2] Ensure client streams are closed when marking a client for close
Eric Blake
eblake at redhat.com
Mon Aug 15 17:34:18 UTC 2011
On 08/15/2011 11:15 AM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange"<berrange at redhat.com>
>
> NB, previous patch was borked due to bad rebase
>
> Every active stream results in a reference being held on the
> virNetServerClientPtr object. This meant that if a client quit
> with any streams active, although all I/O was stopped the
> virNetServerClientPtr object would leak. This causes libvirtd
> to leak any file handles associated with open streams when a
> client quit
>
> To fix this, when we call virNetServerClientClose there is a
> callback invoked which lets the daemon release the streams
> and thus the extra references
>
> * daemon/remote.c: Add a hook to close all streams
> * daemon/stream.c, daemon/stream.h: Add API for releasing
> all streams
> * src/rpc/virnetserverclient.c, src/rpc/virnetserverclient.h:
> Allow registration of a hook to trigger when closing client
> ---
> daemon/remote.c | 11 ++++++++++-
> daemon/stream.c | 38 ++++++++++++++++++++++++++++++++------
> daemon/stream.h | 3 +++
> src/rpc/virnetserverclient.c | 21 +++++++++++++++++++++
> src/rpc/virnetserverclient.h | 5 +++++
> 5 files changed, 71 insertions(+), 7 deletions(-)
> +void
> +daemonRemoveAllClientStreams(daemonClientStream *stream)
> +{
> + daemonClientStream *tmp;
> +
> + VIR_DEBUG("stream=%p", stream);
> +
> + while (stream) {
> + tmp = stream->next;
> +
> + if (!stream->closed) {
> + virStreamEventRemoveCallback(stream->st);
> + virStreamAbort(stream->st);
> + }
> +
> + daemonFreeClientStream(NULL, stream);
> +
> + VIR_DEBUG("next stream=%p", stream);
> + stream = tmp;
Is that the right VIR_DEBUG message, or should it be:
VIR_DEBUG("next stream=%p", tmp);
ACK with that fixed.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list