提交 b9b4fe51 编写于 作者: K kmo

8011009: Use do-while(0) instead of while(0) in EC_TRACE and RC_TRACE* macros

Summary: Improve EC_TRACE and RC_TRACE* to use the do-while(0) trick for statement-like macro
Reviewed-by: sspitsyn, dcubed
上级 e13f80a2
...@@ -39,7 +39,12 @@ ...@@ -39,7 +39,12 @@
#include "runtime/vm_operations.hpp" #include "runtime/vm_operations.hpp"
#ifdef JVMTI_TRACE #ifdef JVMTI_TRACE
#define EC_TRACE(out) if (JvmtiTrace::trace_event_controller()) { SafeResourceMark rm; tty->print_cr out; } while (0) #define EC_TRACE(out) do { \
if (JvmtiTrace::trace_event_controller()) { \
SafeResourceMark rm; \
tty->print_cr out; \
} \
} while (0)
#else #else
#define EC_TRACE(out) #define EC_TRACE(out)
#endif /*JVMTI_TRACE */ #endif /*JVMTI_TRACE */
......
...@@ -72,36 +72,6 @@ ...@@ -72,36 +72,6 @@
// 0x20000000 | 536870912 - unused // 0x20000000 | 536870912 - unused
// 0x40000000 | 1073741824 - unused // 0x40000000 | 1073741824 - unused
// 0x80000000 | 2147483648 - unused // 0x80000000 | 2147483648 - unused
//
// Note: The ResourceMark is to cleanup resource allocated args.
// The "while (0)" is so we can use semi-colon at end of RC_TRACE().
#define RC_TRACE(level, args) \
if ((TraceRedefineClasses & level) != 0) { \
ResourceMark rm; \
tty->print("RedefineClasses-0x%x: ", level); \
tty->print_cr args; \
} while (0)
#define RC_TRACE_NO_CR(level, args) \
if ((TraceRedefineClasses & level) != 0) { \
ResourceMark rm; \
tty->print("RedefineClasses-0x%x: ", level); \
tty->print args; \
} while (0)
#define RC_TRACE_WITH_THREAD(level, thread, args) \
if ((TraceRedefineClasses & level) != 0) { \
ResourceMark rm(thread); \
tty->print("RedefineClasses-0x%x: ", level); \
tty->print_cr args; \
} while (0)
#define RC_TRACE_MESG(args) \
{ \
ResourceMark rm; \
tty->print("RedefineClasses: "); \
tty->print_cr args; \
} while (0)
// Macro for checking if TraceRedefineClasses has a specific bit // Macro for checking if TraceRedefineClasses has a specific bit
// enabled. Returns true if the bit specified by level is set. // enabled. Returns true if the bit specified by level is set.
...@@ -120,16 +90,49 @@ ...@@ -120,16 +90,49 @@
#define RC_TRACE_IN_RANGE(low, high) \ #define RC_TRACE_IN_RANGE(low, high) \
(((TraceRedefineClasses & ((high << 1) - 1)) & ~(low - 1)) != 0) (((TraceRedefineClasses & ((high << 1) - 1)) & ~(low - 1)) != 0)
// Timer support macros. Only do timer operations if timer tracing // Note: The ResourceMark is to cleanup resource allocated args.
// is enabled. The "while (0)" is so we can use semi-colon at end of // The "do {...} while (0)" is so we can use semi-colon at end of RC_TRACE().
// the macro. #define RC_TRACE(level, args) do { \
#define RC_TIMER_START(t) \ if (RC_TRACE_ENABLED(level)) { \
ResourceMark rm; \
tty->print("RedefineClasses-0x%x: ", level); \
tty->print_cr args; \
} \
} while (0)
#define RC_TRACE_NO_CR(level, args) do { \
if (RC_TRACE_ENABLED(level)) { \
ResourceMark rm; \
tty->print("RedefineClasses-0x%x: ", level); \
tty->print args; \
} \
} while (0)
#define RC_TRACE_WITH_THREAD(level, thread, args) do { \
if (RC_TRACE_ENABLED(level)) { \
ResourceMark rm(thread); \
tty->print("RedefineClasses-0x%x: ", level); \
tty->print_cr args; \
} \
} while (0)
#define RC_TRACE_MESG(args) do { \
ResourceMark rm; \
tty->print("RedefineClasses: "); \
tty->print_cr args; \
} while (0)
// Timer support macros. Only do timer operations if timer tracing is enabled.
// The "do {...} while (0)" is so we can use semi-colon at end of the macro.
#define RC_TIMER_START(t) do { \
if (RC_TRACE_ENABLED(0x00000004)) { \ if (RC_TRACE_ENABLED(0x00000004)) { \
t.start(); \ t.start(); \
} while (0) } \
#define RC_TIMER_STOP(t) \ } while (0)
#define RC_TIMER_STOP(t) do { \
if (RC_TRACE_ENABLED(0x00000004)) { \ if (RC_TRACE_ENABLED(0x00000004)) { \
t.stop(); \ t.stop(); \
} while (0) } \
} while (0)
#endif // SHARE_VM_PRIMS_JVMTIREDEFINECLASSESTRACE_HPP #endif // SHARE_VM_PRIMS_JVMTIREDEFINECLASSESTRACE_HPP
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册