[PATCH 29/38] virlog: Introduce an API mutex that serializes all setters

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

 



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);
 extern int virLogReset(void);
-- 
2.4.3

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