Commit ffab3b48 authored by Nick Mathewson's avatar Nick Mathewson 🎨
Browse files

r7326@Kushana: nickm | 2006-08-10 23:50:49 -0700

 And another GCC change: predict that tor_frees() are usually real frees, and tor_asserts() usually wont happen. Other test should wait till -fprofile-arcs


svn:r7022
parent 4eddbcf2
...@@ -95,11 +95,13 @@ extern INLINE double U64_TO_DBL(uint64_t x) { ...@@ -95,11 +95,13 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
#define ATTR_PURE __attribute__((pure)) #define ATTR_PURE __attribute__((pure))
#define ATTR_MALLOC __attribute__((malloc)) #define ATTR_MALLOC __attribute__((malloc))
#define ATTR_NONNULL(x) __attribute__((nonnull x)) #define ATTR_NONNULL(x) __attribute__((nonnull x))
#define PREDICT(exp, val) __builtin_expect((exp), (val))
#else #else
#define ATTR_NORETURN #define ATTR_NORETURN
#define ATTR_PURE #define ATTR_PURE
#define ATTR_MALLOC #define ATTR_MALLOC
#define ATTR_NONNULL(x) #define ATTR_NONNULL(x)
#define PREDICT(exp, val)
#endif #endif
/* ===== String compatibility */ /* ===== String compatibility */
......
...@@ -38,12 +38,17 @@ ...@@ -38,12 +38,17 @@
*/ */
#error "Sorry; we don't support building with NDEBUG." #error "Sorry; we don't support building with NDEBUG."
#else #else
#ifdef __GNUC__
#define PREDICT_FALSE(x) PREDICT((x) != ((typeof(x)) 0), 0)
#else
#define PREDICT_FALSE(x) !(x)
#endif
#define tor_assert(expr) do { \ #define tor_assert(expr) do { \
if (!(expr)) { \ if (PREDICT_FALSE(expr)) { \
log(LOG_ERR, LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \ log(LOG_ERR, LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \
_SHORT_FILE_, __LINE__, __func__, #expr); \ _SHORT_FILE_, __LINE__, __func__, #expr); \
fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \ fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \
_SHORT_FILE_, __LINE__, __func__, #expr); \ _SHORT_FILE_, __LINE__, __func__, #expr); \
abort(); \ abort(); \
} } while (0) } } while (0)
#endif #endif
...@@ -74,13 +79,14 @@ void *_tor_memdup(const void *mem, size_t len DMALLOC_PARAMS) ...@@ -74,13 +79,14 @@ void *_tor_memdup(const void *mem, size_t len DMALLOC_PARAMS)
extern int dmalloc_free(const char *file, const int line, void *pnt, extern int dmalloc_free(const char *file, const int line, void *pnt,
const int func_id); const int func_id);
#define tor_free(p) do { \ #define tor_free(p) do { \
if (p) { \ if (PREDICT((p)!=NULL, 1) { \
dmalloc_free(_SHORT_FILE_, __LINE__, (p), 0); \ dmalloc_free(_SHORT_FILE_, __LINE__, (p), 0); \
(p)=NULL; \ (p)=NULL; \
} \ } \
} while (0) } while (0)
#else #else
#define tor_free(p) do { if (p) {free(p); (p)=NULL;} } while (0) #define tor_free(p) do { if (PREDICT((p)!=NULL,1)) { free(p); (p)=NULL;} } \
while (0)
#endif #endif
#define tor_malloc(size) _tor_malloc(size DMALLOC_ARGS) #define tor_malloc(size) _tor_malloc(size DMALLOC_ARGS)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment