diff options
| -rw-r--r-- | src/err.cpp | 13 | ||||
| -rw-r--r-- | src/err.hpp | 26 | 
2 files changed, 27 insertions, 12 deletions
| diff --git a/src/err.cpp b/src/err.cpp index f374de9..ff81e03 100644 --- a/src/err.cpp +++ b/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() diff --git a/src/err.hpp b/src/err.hpp index 9558a10..7c7a9d8 100644 --- a/src/err.hpp +++ b/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) | 
