mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-18 16:54:42 -04:00
Add an EVUTIL_ASSERT() to replace our calls to assert().
The big difference here is that EVUTIL_ASSERT() passes its message on via event_errx() before aborting, so that the application has a prayer of noticing and recording it. svn:r1463
This commit is contained in:
parent
a8267663de
commit
37c3456d70
@ -33,6 +33,8 @@
|
|||||||
#define EV_CHECK_FMT(a,b)
|
#define EV_CHECK_FMT(a,b)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define _EVENT_ERR_ABORT 0xdeaddead
|
||||||
|
|
||||||
void event_err(int eval, const char *fmt, ...) EV_CHECK_FMT(2,3);
|
void event_err(int eval, const char *fmt, ...) EV_CHECK_FMT(2,3);
|
||||||
void event_warn(const char *fmt, ...) EV_CHECK_FMT(1,2);
|
void event_warn(const char *fmt, ...) EV_CHECK_FMT(1,2);
|
||||||
void event_sock_err(int eval, int sock, const char *fmt, ...) EV_CHECK_FMT(3,4);
|
void event_sock_err(int eval, int sock, const char *fmt, ...) EV_CHECK_FMT(3,4);
|
||||||
|
2
log.c
2
log.c
@ -80,6 +80,8 @@ event_exit(int errcode)
|
|||||||
{
|
{
|
||||||
if (fatal_fn)
|
if (fatal_fn)
|
||||||
fatal_fn(errcode);
|
fatal_fn(errcode);
|
||||||
|
else if (errcode == _EVENT_ERR_ABORT)
|
||||||
|
abort();
|
||||||
else
|
else
|
||||||
exit(errcode);
|
exit(errcode);
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,11 @@
|
|||||||
#include "event-config.h"
|
#include "event-config.h"
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
/* For EVUTIL_ASSERT */
|
||||||
|
#include "log-internal.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@ -132,6 +137,30 @@ int evutil_socket_connect(evutil_socket_t *fd_ptr, struct sockaddr *sa, int sock
|
|||||||
|
|
||||||
int evutil_socket_finished_connecting(evutil_socket_t fd);
|
int evutil_socket_finished_connecting(evutil_socket_t fd);
|
||||||
|
|
||||||
|
/* Evaluates to the same boolean value as 'p', and hints to the compiler that
|
||||||
|
* we expect this value to be false. */
|
||||||
|
#ifdef __GNUC__X
|
||||||
|
#define EVUTIL_UNLIKELY(p) __builtin_expect(!!(p),0)
|
||||||
|
#else
|
||||||
|
#define EVUTIL_UNLIKELY(p) (p)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Replacement for assert() that calls event_errx on failure. */
|
||||||
|
#define EVUTIL_ASSERT(cond) \
|
||||||
|
do { \
|
||||||
|
if (EVUTIL_UNLIKELY(!(cond))) { \
|
||||||
|
event_errx(_EVENT_ERR_ABORT, \
|
||||||
|
"%s:%d: Assertion %s failed in %s", \
|
||||||
|
__FILE__,__LINE__,#cond,__func__); \
|
||||||
|
/* In case a user-supplied handler tries to */ \
|
||||||
|
/* return control to us, log and abort here. */ \
|
||||||
|
(void)fprintf(stderr, \
|
||||||
|
"%s:%d: Assertion %s failed in %s", \
|
||||||
|
__FILE__,__LINE__,#cond,__func__); \
|
||||||
|
abort(); \
|
||||||
|
} \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user