Author: aconway
Date: Wed May 14 14:45:29 2014
New Revision: 1594586

URL: http://svn.apache.org/r1594586
Log:
QPID-DISPATCH-16: Don't evalaute qd_log() arguments unless the log message is 
enabled.

Modified:
    qpid/dispatch/trunk/include/qpid/dispatch/log.h
    qpid/dispatch/trunk/src/log.c

Modified: qpid/dispatch/trunk/include/qpid/dispatch/log.h
URL: 
http://svn.apache.org/viewvc/qpid/dispatch/trunk/include/qpid/dispatch/log.h?rev=1594586&r1=1594585&r2=1594586&view=diff
==============================================================================
--- qpid/dispatch/trunk/include/qpid/dispatch/log.h (original)
+++ qpid/dispatch/trunk/include/qpid/dispatch/log.h Wed May 14 14:45:29 2014
@@ -18,21 +18,39 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+#include <stdbool.h>
 
-#define QD_LOG_NONE     0x00000000
-#define QD_LOG_TRACE    0x00000001
-#define QD_LOG_DEBUG    0x00000002
-#define QD_LOG_INFO     0x00000004
-#define QD_LOG_NOTICE   0x00000008
-#define QD_LOG_WARNING  0x00000010
-#define QD_LOG_ERROR    0x00000020
-#define QD_LOG_CRITICAL 0x00000040
+/** Logging levels */
+typedef enum {
+    QD_LOG_NONE     =0x00000000,
+    QD_LOG_TRACE    =0x00000001,
+    QD_LOG_DEBUG    =0x00000002,
+    QD_LOG_INFO     =0x00000004,
+    QD_LOG_NOTICE   =0x00000008,
+    QD_LOG_WARNING  =0x00000010,
+    QD_LOG_ERROR    =0x00000020,
+    QD_LOG_CRITICAL =0x00000040,
+} qd_log_level_t;
 
 typedef struct qd_log_source_t qd_log_source_t;
 
 qd_log_source_t* qd_log_source(const char *module);
 
+/**@internal*/
+bool qd_log_enabled(qd_log_source_t *source, int level);
+/**@internal*/
 void qd_log_impl(qd_log_source_t *source, int level, const char *file, int 
line, const char *fmt, ...);
-#define qd_log(s, c, f, ...) qd_log_impl(s, c, __FILE__, __LINE__, f , 
##__VA_ARGS__)
+
+/** Log a message
+ * Note: does not evaluate the format args unless the log message is enabled.
+ * @param s qd_log_source_t* source of log message.
+ * @param c qd_log_level_t log level of message
+ * @param f printf style format string ...
+ */
+#define qd_log(s, c, f, ...) \
+    do { if (qd_log_enabled(s,c)) qd_log_impl(s, c, __FILE__, __LINE__, f , 
##__VA_ARGS__); } while(0)
+
+/** Set the mask to enable log levels, see qd_log_level_t */
+void qd_log_set_mask(int mask);
 
 #endif

Modified: qpid/dispatch/trunk/src/log.c
URL: 
http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/log.c?rev=1594586&r1=1594585&r2=1594586&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/log.c (original)
+++ qpid/dispatch/trunk/src/log.c Wed May 14 14:45:29 2014
@@ -160,10 +160,15 @@ void qd_log_source_free(qd_log_source_t*
     free(src);
 }
 
+bool qd_log_enabled(qd_log_source_t *source, int level) {
+    if (!source) return false;
+    int mask = source->mask == -1 ? default_log_source->mask : source->mask;
+    return level & mask;
+}
+
 void qd_log_impl(qd_log_source_t *source, int level, const char *file, int 
line, const char *fmt, ...)
 {
-    int mask = source->mask == -1 ? default_log_source->mask : source->mask;
-    if (!(level & mask)) return;
+    if (!qd_log_enabled(source, level)) return;
 
     qd_log_entry_t *entry = new_qd_log_entry_t();
     DEQ_ITEM_INIT(entry);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to