[libvirt] [PATCH 8/9] Fix locking wrt virNetClientStreamPtr object
Daniel P. Berrange
berrange at redhat.com
Wed Jun 29 09:43:10 UTC 2011
On Tue, Jun 28, 2011 at 12:12:53PM -0600, Eric Blake wrote:
> On 06/28/2011 11:01 AM, Daniel P. Berrange wrote:
> > The client stream object can be used independantly of the
>
> s/independantly/independently/
>
> > virNetClientPtr object, so must have full locking of its
> > own and not rely on any caller.
> >
> > * src/remote/remote_driver.c: Remove locking around stream
> > callback
> > * src/rpc/virnetclientstream.c: Add locking to all APIs
> > and callbacks
> > ---
> > src/remote/remote_driver.c | 3 -
> > src/rpc/virnetclientstream.c | 112 +++++++++++++++++++++++++++++++++---------
> > 2 files changed, 89 insertions(+), 26 deletions(-)
> >
> > @@ -390,20 +435,23 @@ int virNetClientStreamEventAddCallback(virNetClientStreamPtr st,
> > void *opaque,
> > virFreeCallback ff)
> > {
> > + int ret = -1;
> > +
> > + virMutexLock(&st->lock);
> > if (st->cb) {
> > virNetError(VIR_ERR_INTERNAL_ERROR,
> > "%s", _("multiple stream callbacks not supported"));
> > - return 1;
> > + goto cleanup;
> > }
> >
> > - virNetClientStreamRef(st);
> > + st->refs++;
> > if ((st->cbTimer =
> > virEventAddTimeout(-1,
> > virNetClientStreamEventTimer,
> > st,
> > virNetClientStreamEventTimerFree)) < 0) {
> > - virNetClientStreamFree(st);
> > - return -1;
> > + st->refs--;
> > + goto cleanup;
> > }
>
> This increments st->refs on success,
>
> > int virNetClientStreamEventRemoveCallback(virNetClientStreamPtr st)
> > {
> > + int ret = -1;
> > +
> > + virMutexUnlock(&st->lock);
> > if (!st->cb) {
> > virNetError(VIR_ERR_INTERNAL_ERROR,
> > "%s", _("no stream callback registered"));
> > - return -1;
> > + goto cleanup;
> > }
> >
> > if (!st->cbDispatch &&
>
> but nothing here ever decrements it.
The decrement is done by the free callback, virNetClientStreamEventTimerFree
asynchronously.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list