X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Flikely%2Flikely.h;h=a8f003d72777bf884dbd9831c30eb0b0f0a2ae94;hb=c8f5d9df177cb3326c2b27909b9925521490c7b9;hp=62a203727507f359dcfa46ef4209629dfa79a848;hpb=c4c5fed020ba44b9930119672a36a1cb33aff090;p=ccan diff --git a/ccan/likely/likely.h b/ccan/likely/likely.h index 62a20372..a8f003d7 100644 --- a/ccan/likely/likely.h +++ b/ccan/likely/likely.h @@ -1,10 +1,10 @@ +/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_LIKELY_H #define CCAN_LIKELY_H #include "config.h" -#include #include -#ifndef DEBUG +#ifndef CCAN_LIKELY_DEBUG #if HAVE_BUILTIN_EXPECT /** * likely - indicate that a condition is likely to be true. @@ -23,7 +23,7 @@ * // Returns false if we overflow. * static inline bool inc_int(unsigned int *val) * { - * *(val)++; + * (*val)++; * if (likely(*val)) * return true; * return false; @@ -39,13 +39,13 @@ * code path and optimize appropriately; see likely() above. * * See Also: - * likely(), likely_stats(), UNLIKELY_FUNCTION_ATTRIBUTE (compiler.h) + * likely(), likely_stats(), COLD (compiler.h) * * Example: * // Prints a warning if we overflow. * static inline void inc_int(unsigned int *val) * { - * *(val)++; + * (*val)++; * if (unlikely(*val == 0)) * fprintf(stderr, "Overflow!"); * } @@ -55,7 +55,9 @@ #define likely(cond) (!!(cond)) #define unlikely(cond) (!!(cond)) #endif -#else /* DEBUG versions */ +#else /* CCAN_LIKELY_DEBUG versions */ +#include + #define likely(cond) \ (_likely_trace(!!(cond), 1, stringify(cond), __FILE__, __LINE__)) #define unlikely(cond) \ @@ -64,17 +66,14 @@ long _likely_trace(bool cond, bool expect, const char *condstr, const char *file, unsigned int line); -#endif - -#ifdef DEBUG /** * likely_stats - return description of abused likely()/unlikely() * @min_hits: minimum number of hits * @percent: maximum percentage correct * - * When DEBUG is defined, likely() and unlikely() trace their results: this - * causes a significant slowdown, but allows analysis of whether the stats - * are correct. + * When CCAN_LIKELY_DEBUG is defined, likely() and unlikely() trace their + * results: this causes a significant slowdown, but allows analysis of + * whether the branches are labelled correctly. * * This function returns a malloc'ed description of the least-correct * usage of likely() or unlikely(). It ignores places which have been @@ -90,7 +89,7 @@ long _likely_trace(bool cond, bool expect, * // Print every place hit more than twice which was wrong > 5%. * static void report_stats(void) * { - * #ifdef DEBUG + * #ifdef CCAN_LIKELY_DEBUG * const char *bad; * * while ((bad = likely_stats(2, 95)) != NULL) { @@ -100,6 +99,13 @@ long _likely_trace(bool cond, bool expect, * #endif * } */ -const char *likely_stats(unsigned int min_hits, unsigned int percent); -#endif /* DEBUG */ +char *likely_stats(unsigned int min_hits, unsigned int percent); + +/** + * likely_stats_reset - free up memory of likely()/unlikely() branches. + * + * This can also plug memory leaks. + */ +void likely_stats_reset(void); +#endif /* CCAN_LIKELY_DEBUG */ #endif /* CCAN_LIKELY_H */