mirror of
https://github.com/zeromq/libzmq.git
synced 2025-01-14 09:47:56 +08:00
Enable exceptions raising on assert on Win32
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
parent
a70bea01cc
commit
a8362abf11
13
src/err.cpp
13
src/err.cpp
@ -62,6 +62,19 @@ const char *zmq::errno_to_string (int errno_)
|
||||
}
|
||||
}
|
||||
|
||||
void zmq::zmq_abort(const char *errmsg_)
|
||||
{
|
||||
#if defined ZMQ_HAVE_WINDOWS
|
||||
|
||||
// Raise STATUS_FATAL_APP_EXIT.
|
||||
ULONG_PTR extra_info [1];
|
||||
extra_info [0] = (ULONG_PTR) errmsg_;
|
||||
RaiseException (0x40000015, EXCEPTION_NONCONTINUABLE, 1, extra_info);
|
||||
#else
|
||||
abort ();
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef ZMQ_HAVE_WINDOWS
|
||||
|
||||
const char *zmq::wsa_error()
|
||||
|
26
src/err.hpp
26
src/err.hpp
@ -42,6 +42,7 @@
|
||||
namespace zmq
|
||||
{
|
||||
const char *errno_to_string (int errno_);
|
||||
void zmq_abort (const char *errmsg_);
|
||||
}
|
||||
|
||||
#ifdef ZMQ_HAVE_WINDOWS
|
||||
@ -51,7 +52,7 @@ namespace zmq
|
||||
const char *wsa_error ();
|
||||
const char *wsa_error_no (int no_);
|
||||
void win_error (char *buffer_, size_t buffer_size_);
|
||||
void wsa_error_to_errno ();
|
||||
void wsa_error_to_errno ();
|
||||
}
|
||||
|
||||
// Provides convenient way to check WSA-style errors on Windows.
|
||||
@ -62,7 +63,7 @@ namespace zmq
|
||||
if (errstr != NULL) {\
|
||||
fprintf (stderr, "Assertion failed: %s (%s:%d)\n", errstr, \
|
||||
__FILE__, __LINE__);\
|
||||
abort ();\
|
||||
zmq::zmq_abort (errstr);\
|
||||
}\
|
||||
}\
|
||||
} while (false)
|
||||
@ -74,7 +75,7 @@ namespace zmq
|
||||
if (errstr != NULL) {\
|
||||
fprintf (stderr, "Assertion failed: %s (%s:%d)\n", errstr, \
|
||||
__FILE__, __LINE__);\
|
||||
abort ();\
|
||||
zmq::zmq_abort (errstr);\
|
||||
}\
|
||||
} while (false)
|
||||
|
||||
@ -86,7 +87,7 @@ namespace zmq
|
||||
zmq::win_error (errstr, 256);\
|
||||
fprintf (stderr, "Assertion failed: %s (%s:%d)\n", errstr, \
|
||||
__FILE__, __LINE__);\
|
||||
abort ();\
|
||||
zmq::zmq_abort (errstr);\
|
||||
}\
|
||||
} while (false)
|
||||
|
||||
@ -100,7 +101,7 @@ namespace zmq
|
||||
if (unlikely (!(x))) {\
|
||||
fprintf (stderr, "Assertion failed: %s (%s:%d)\n", #x, \
|
||||
__FILE__, __LINE__);\
|
||||
abort ();\
|
||||
zmq::zmq_abort (#x);\
|
||||
}\
|
||||
} while (false)
|
||||
|
||||
@ -108,9 +109,9 @@ namespace zmq
|
||||
#define errno_assert(x) \
|
||||
do {\
|
||||
if (unlikely (!(x))) {\
|
||||
perror (NULL);\
|
||||
fprintf (stderr, "%s (%s:%d)\n", #x, __FILE__, __LINE__);\
|
||||
abort ();\
|
||||
const char *errstr = strerror (errno);\
|
||||
fprintf (stderr, "%s (%s:%d)\n", errstr, __FILE__, __LINE__);\
|
||||
zmq::zmq_abort (errstr);\
|
||||
}\
|
||||
} while (false)
|
||||
|
||||
@ -118,8 +119,9 @@ namespace zmq
|
||||
#define posix_assert(x) \
|
||||
do {\
|
||||
if (unlikely (x)) {\
|
||||
fprintf (stderr, "%s (%s:%d)\n", strerror (x), __FILE__, __LINE__);\
|
||||
abort ();\
|
||||
const char *errstr = strerror (x);\
|
||||
fprintf (stderr, "%s (%s:%d)\n", errstr, __FILE__, __LINE__);\
|
||||
zmq::zmq_abort (errstr);\
|
||||
}\
|
||||
} while (false)
|
||||
|
||||
@ -129,7 +131,7 @@ namespace zmq
|
||||
if (unlikely (x)) {\
|
||||
const char *errstr = gai_strerror (x);\
|
||||
fprintf (stderr, "%s (%s:%d)\n", errstr, __FILE__, __LINE__);\
|
||||
abort ();\
|
||||
zmq::zmq_abort (errstr);\
|
||||
}\
|
||||
} while (false)
|
||||
|
||||
@ -139,7 +141,7 @@ namespace zmq
|
||||
if (unlikely (!x)) {\
|
||||
fprintf (stderr, "FATAL ERROR: OUT OF MEMORY (%s:%d)\n",\
|
||||
__FILE__, __LINE__);\
|
||||
abort ();\
|
||||
zmq::zmq_abort ("FATAL ERROR: OUT OF MEMORY");\
|
||||
}\
|
||||
} while (false)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user