[sheepdog] [PATCH v3 1/4] util: solve cyclic dependency of util.h and logger.h

Hitoshi Mitake mitake.hitoshi at gmail.com
Wed Jul 10 16:08:15 CEST 2013


From: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>

Current sheepdog specialized assert() in util.h cannot be used by
util.h itself because it depends on logger.h and logger.h depends on
util.h, too.

This patch solves this cyclic dependency.

Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
 include/logger.h |    6 ++++++
 include/util.h   |   39 ++++++++++++++++++++++++---------------
 2 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/include/logger.h b/include/logger.h
index 5c9aab6..41a1488 100644
--- a/include/logger.h
+++ b/include/logger.h
@@ -81,4 +81,10 @@ void sd_backtrace(void);
 		log_write(SDOG_DEBUG, __func__, __LINE__, fmt, ##args);	\
 	} while (0)
 
+static inline void do_assert(const char *expr, const char *func, int line)
+{
+	log_write(SDOG_EMERG, func, line, "Asserting `%s' failed.", expr);
+	abort();
+}
+
 #endif	/* LOG_H */
diff --git a/include/util.h b/include/util.h
index e70bb9f..1517680 100644
--- a/include/util.h
+++ b/include/util.h
@@ -14,6 +14,23 @@
 #include "bitops.h"
 #include "list.h"
 
+static inline void do_assert(const char *expr, const char *func, int line);
+
+#ifdef assert
+#undef assert
+#endif
+
+#ifndef NDEBUG
+
+#define assert(expr) ((expr) ?				\
+			(void)0 : do_assert(#expr, __func__, __LINE__))
+
+#else
+
+#define assert(expr) ((void)0)
+
+#endif	/* NDEBUG */
+
 #define SECTOR_SIZE (1U << 9)
 #define BLOCK_SIZE (1U << 12)
 
@@ -161,21 +178,6 @@ int atomic_create_and_write(const char *path, char *buf, size_t len);
 	__removed;							\
 })
 
-#ifdef assert
-#undef assert
-#endif
-
-#ifndef NDEBUG
-
-#define assert(expr) ((expr) ?						\
-			(void)0 : panic("Asserting `%s' failed.", #expr))
-
-#else
-
-#define assert(expr) ((void)0)
-
-#endif	/* NDEBUG */
-
 /* urcu helpers */
 
 /* Boolean data type which can be accessed by multiple threads */
@@ -243,4 +245,11 @@ extern mode_t sd_def_dmode;
 /* Force a compilation error if the condition is true */
 #define BUILD_BUG_ON(condition) ((void)sizeof(struct { int: -!!(condition); }))
 
+/*
+ * The below including of logger.h is required for suppressing compiler warning
+ * because if .c file include util.h but not logger.h, the prototype
+ * declaration of do_assert() is treated as defined but not used function.
+ */
+#include "logger.h"
+
 #endif
-- 
1.7.5.1




More information about the sheepdog mailing list