[libvirt] [PATCH 29/38] virlog: Introduce an API mutex that serializes all setters
Daniel P. Berrange
berrange at redhat.com
Thu Mar 31 18:13:41 UTC 2016
On Thu, Mar 31, 2016 at 07:49:02PM +0200, Erik Skultety wrote:
> If the API isn't closed, a situation with 2 setters where one is about to
> define a set of outputs and the other is already defining a new one, may occur.
> By resetting all outputs, all file descriptors are closed. However, the other
> setter may still have a dangling reference to a file descriptor which may have
> already been closed.
> ---
> src/libvirt_private.syms | 2 ++
> src/util/virlog.c | 15 +++++++++++++++
> src/util/virlog.h | 2 ++
> 3 files changed, 19 insertions(+)
>
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index cc40b46..14047f5 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -1741,6 +1741,8 @@ virLockSpaceReleaseResourcesForOwner;
>
>
> # util/virlog.h
> +virLogAPILock;
> +virLogAPIUnlock;
> virLogDefineFilters;
> virLogDefineOutputs;
> virLogFilterListFree;
> diff --git a/src/util/virlog.c b/src/util/virlog.c
> index 769dcec..6aa9c91 100644
> --- a/src/util/virlog.c
> +++ b/src/util/virlog.c
> @@ -128,6 +128,21 @@ static void virLogOutputToFd(virLogSourcePtr src,
> void *data);
>
>
> +/* Setters need to be serialized on API entry point */
> +static virMutex virLogAPIMutex;
> +
> +void
> +virLogAPILock(void)
> +{
> + virMutexLock(&virLogAPIMutex);
> +}
> +
> +void
> +virLogAPIUnlock(void)
> +{
> + virMutexUnlock(&virLogAPIMutex);
> +}
> +
> /*
> * Logs accesses must be serialized though a mutex
> */
> diff --git a/src/util/virlog.h b/src/util/virlog.h
> index 1c55a48..f5c0a4f 100644
> --- a/src/util/virlog.h
> +++ b/src/util/virlog.h
> @@ -203,6 +203,8 @@ extern void virLogFilterListFree(virLogFilterPtr *list, int count);
> * Internal logging API
> */
>
> +extern void virLogAPILock(void);
> +extern void virLogAPIUnlock(void);
> extern void virLogLock(void);
> extern void virLogUnlock(void);
I'm not really seeing the reason why we need a second mutex instead of
just ensuring we acquire the existing mutex in the right places.
Regards,
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