xenstored: log tdb message via xenstored's logging mechanisms

TDB provides us with a callback for this purpose. Use it in both
xenstored and xs_tdb_dump.

While at it make the existing log() macro tollerate memory failures.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Ian Campbell committed 2015-01-12 16:02:43 +00:00
1 parent 03f15f8d60
commit 16cc7dc7ae
2 files changed
+44 -7

No files matched your search

+33 -6
View File
@@ -89,9 +89,14 @@ static void check_store(void);
#define log(...) \
do { \
char *s = talloc_asprintf(NULL, __VA_ARGS__); \
trace("%s\n", s); \
syslog(LOG_ERR, "%s", s); \
talloc_free(s); \
if (s) { \
trace("%s\n", s); \
syslog(LOG_ERR, "%s", s); \
talloc_free(s); \
} else { \
trace("talloc failure during logging\n"); \
syslog(LOG_ERR, "talloc failure during logging\n"); \
} \
} while (0)
@@ -1479,13 +1484,35 @@ static void manual_node(const char *name, const char *child)
talloc_free(node);
}
static void tdb_logger(TDB_CONTEXT *tdb, int level, const char * fmt, ...)
{
va_list ap;
char *s;
va_start(ap, fmt);
s = talloc_vasprintf(NULL, fmt, ap);
va_end(ap);
if (s) {
trace("TDB: %s\n", s);
syslog(LOG_ERR, "TDB: %s", s);
if (verbose)
xprintf("TDB: %s", s);
talloc_free(s);
} else {
trace("talloc failure during logging\n");
syslog(LOG_ERR, "talloc failure during logging\n");
}
}
static void setup_structure(void)
{
char *tdbname;
tdbname = talloc_strdup(talloc_autofree_context(), xs_daemon_tdb());
if (!(tdb_flags & TDB_INTERNAL))
tdb_ctx = tdb_open(tdbname, 0, tdb_flags, O_RDWR, 0);
tdb_ctx = tdb_open_ex(tdbname, 0, tdb_flags, O_RDWR, 0,
&tdb_logger, NULL);
if (tdb_ctx) {
/* XXX When we make xenstored able to restart, this will have
@@ -1516,8 +1543,8 @@ static void setup_structure(void)
talloc_free(tlocal);
}
else {
tdb_ctx = tdb_open(tdbname, 7919, tdb_flags, O_RDWR|O_CREAT,
0640);
tdb_ctx = tdb_open_ex(tdbname, 7919, tdb_flags, O_RDWR|O_CREAT,
0640, &tdb_logger, NULL);
if (!tdb_ctx)
barf_perror("Could not create tdb file %s", tdbname);
+11 -1
View File
@@ -33,6 +33,15 @@ static char perm_to_char(enum xs_perm_type perm)
'?';
}
static void tdb_logger(TDB_CONTEXT *tdb, int level, const char * fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
}
int main(int argc, char *argv[])
{
TDB_DATA key;
@@ -41,7 +50,8 @@ int main(int argc, char *argv[])
if (argc != 2)
barf("Usage: xs_tdb_dump <tdbfile>");
tdb = tdb_open(talloc_strdup(NULL, argv[1]), 0, 0, O_RDONLY, 0);
tdb = tdb_open_ex(talloc_strdup(NULL, argv[1]), 0, 0, O_RDONLY, 0,
&tdb_logger, NULL);
if (!tdb)
barf_perror("Could not open %s", argv[1]);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.