|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 01/11] tools/libs/toollog: Provide a default logger
This is most conveniently done like this because xtl_logger_stdio.c
knows how to provide a static logger without doing any memory
allocations. That's useful because it can't fail.
Add the new symbol to the map file and bump the minor version
accordingly.
Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
CC: Wei Liu <wei.liu2@xxxxxxxxxx>
---
v2: New in this version of the series
---
tools/libs/toollog/Makefile | 2 +-
tools/libs/toollog/include/xentoollog.h | 5 +++++
tools/libs/toollog/libxentoollog.map | 5 +++++
tools/libs/toollog/xtl_logger_stdio.c | 26 ++++++++++++++++++++++++++
4 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/tools/libs/toollog/Makefile b/tools/libs/toollog/Makefile
index 8aae2c8f53..3aa0997757 100644
--- a/tools/libs/toollog/Makefile
+++ b/tools/libs/toollog/Makefile
@@ -2,7 +2,7 @@ XEN_ROOT = $(CURDIR)/../../..
include $(XEN_ROOT)/tools/Rules.mk
MAJOR = 1
-MINOR = 0
+MINOR = 1
SHLIB_LDFLAGS += -Wl,--version-script=libxentoollog.map
CFLAGS += -Werror -Wmissing-prototypes
diff --git a/tools/libs/toollog/include/xentoollog.h
b/tools/libs/toollog/include/xentoollog.h
index 76f17fe125..942eb76169 100644
--- a/tools/libs/toollog/include/xentoollog.h
+++ b/tools/libs/toollog/include/xentoollog.h
@@ -86,6 +86,11 @@ void
xtl_stdiostream_adjust_flags(xentoollog_logger_stdiostream*,
void xtl_logger_destroy(struct xentoollog_logger *logger /* 0 is ok */);
+xentoollog_logger_stdiostream *xtl_defaultlogger_stdiostream(void);
+ /* Returns pointer to a static global logger which writes to stderr.
+ * Reconfiguring it is permitted but destroying it is forbidden.
+ * This function cannot fail. */
+
/*---------- facilities for generating log messages ----------*/
void xtl_logv(struct xentoollog_logger *logger,
diff --git a/tools/libs/toollog/libxentoollog.map
b/tools/libs/toollog/libxentoollog.map
index c183cf555d..00eaacaeaf 100644
--- a/tools/libs/toollog/libxentoollog.map
+++ b/tools/libs/toollog/libxentoollog.map
@@ -10,3 +10,8 @@ VERS_1.0 {
xtl_stdiostream_set_minlevel;
local: *; /* Do not expose anything by default */
};
+
+VERS_1.1 {
+ global:
+ xtl_defaultlogger_stdiostream;
+} VERS_1.0;
diff --git a/tools/libs/toollog/xtl_logger_stdio.c
b/tools/libs/toollog/xtl_logger_stdio.c
index 52dfbf51e3..07fe355626 100644
--- a/tools/libs/toollog/xtl_logger_stdio.c
+++ b/tools/libs/toollog/xtl_logger_stdio.c
@@ -28,6 +28,7 @@
#include <stdlib.h>
#include <errno.h>
#include <stdbool.h>
+#include <pthread.h>
struct xentoollog_logger_stdiostream {
xentoollog_logger vtable;
@@ -191,6 +192,31 @@ xentoollog_logger_stdiostream *xtl_createlogger_stdiostream
return XTL_NEW_LOGGER(stdiostream, newlogger);
}
+xentoollog_logger_stdiostream *xtl_defaultlogger_stdiostream(void) {
+ static xentoollog_logger_stdiostream deflogger = {
+ .vtable = {
+ .vmessage = stdiostream_vmessage,
+ .progress = stdiostream_progress,
+ .destroy = 0, /* no-one should destroy this */
+ },
+ .min_level = XTL_PROGRESS,
+ /* for other fields except .f, 0 is good */
+ };
+
+ /*
+ * Unfortunately, stderr is not a `constant expression', so we
+ * can't handle it in the initialisation. Also we can't do a
+ * lockless assignment, even of the identical value, without
+ * violating threading rules. Nnng.
+ */
+ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&mutex);
+ deflogger.f = stderr;
+ pthread_mutex_unlock(&mutex);
+
+ return &deflogger;
+};
+
/*
* Local variables:
* mode: C
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |