summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Lucas <evanlucas@me.com>2015-09-16 10:12:41 -0500
committerEvan Lucas <evanlucas@me.com>2015-09-17 15:25:14 -0500
commit870229e66529309dfea932c52d718ddc2d734966 (patch)
treefe8047c3f6d233cebcedb1da66800f9936dc1644
parent1fa0cb83e323db6d077e0e9970f3776eb5805140 (diff)
downloadandroid-node-v8-870229e66529309dfea932c52d718ddc2d734966.tar.gz
android-node-v8-870229e66529309dfea932c52d718ddc2d734966.tar.bz2
android-node-v8-870229e66529309dfea932c52d718ddc2d734966.zip
src: Add ABORT macro
Windows 8+ compiled in Release mode exits with code 0xC0000409 when abort() is called. This prevents us from being able to reliably verify an abort exit code (3) on windows. PR-URL: https://github.com/nodejs/node/pull/2776 Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Brian White <mscdex@mscdex.net> Reviewed-by: Trevor Norris <trev.norris@gmail.com>
-rw-r--r--src/cares_wrap.cc4
-rw-r--r--src/fs_event_wrap.cc2
-rw-r--r--src/node.cc12
-rw-r--r--src/node_crypto.cc4
-rw-r--r--src/node_crypto_bio.cc2
-rw-r--r--src/spawn_sync.cc4
-rw-r--r--src/stream_wrap.cc2
-rw-r--r--src/tls_wrap.cc2
-rw-r--r--src/tty_wrap.cc2
-rw-r--r--src/udp_wrap.cc4
-rw-r--r--src/util.h11
11 files changed, 28 insertions, 21 deletions
diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc
index 4ef5e01e77..b3181da135 100644
--- a/src/cares_wrap.cc
+++ b/src/cares_wrap.cc
@@ -1067,7 +1067,7 @@ static void GetAddrInfo(const FunctionCallbackInfo<Value>& args) {
break;
default:
CHECK(0 && "bad address family");
- abort();
+ ABORT();
}
GetAddrInfoReqWrap* req_wrap = new GetAddrInfoReqWrap(env, req_wrap_obj);
@@ -1193,7 +1193,7 @@ static void SetServers(const FunctionCallbackInfo<Value>& args) {
break;
default:
CHECK(0 && "Bad address family.");
- abort();
+ ABORT();
}
if (err)
diff --git a/src/fs_event_wrap.cc b/src/fs_event_wrap.cc
index 0d0096cab7..7768f94459 100644
--- a/src/fs_event_wrap.cc
+++ b/src/fs_event_wrap.cc
@@ -146,7 +146,7 @@ void FSEventWrap::OnEvent(uv_fs_event_t* handle, const char* filename,
event_string = env->change_string();
} else {
CHECK(0 && "bad fs events flag");
- abort();
+ ABORT();
}
Local<Value> argv[] = {
diff --git a/src/node.cc b/src/node.cc
index d59cdeb55d..c139c509a2 100644
--- a/src/node.cc
+++ b/src/node.cc
@@ -918,7 +918,7 @@ void SetupDomainUse(const FunctionCallbackInfo<Value>& args) {
if (!tick_callback_function->IsFunction()) {
fprintf(stderr, "process._tickDomainCallback assigned to non-function\n");
- abort();
+ ABORT();
}
process_object->Set(env->tick_callback_string(), tick_callback_function);
@@ -1514,7 +1514,7 @@ void GetActiveHandles(const FunctionCallbackInfo<Value>& args) {
static void Abort(const FunctionCallbackInfo<Value>& args) {
- abort();
+ ABORT();
}
@@ -2134,14 +2134,14 @@ static void OnFatalError(const char* location, const char* message) {
fprintf(stderr, "FATAL ERROR: %s\n", message);
}
fflush(stderr);
- abort();
+ ABORT();
}
NO_RETURN void FatalError(const char* location, const char* message) {
OnFatalError(location, message);
// to suppress compiler warning
- abort();
+ ABORT();
}
@@ -3543,9 +3543,9 @@ inline void PlatformInit() {
// Anything but EBADF means something is seriously wrong. We don't
// have to special-case EINTR, fstat() is not interruptible.
if (errno != EBADF)
- abort();
+ ABORT();
if (fd != open("/dev/null", O_RDWR))
- abort();
+ ABORT();
}
CHECK_EQ(err, 0);
diff --git a/src/node_crypto.cc b/src/node_crypto.cc
index 40f065e687..cb5ef574a1 100644
--- a/src/node_crypto.cc
+++ b/src/node_crypto.cc
@@ -182,7 +182,7 @@ static void crypto_lock_init(void) {
for (i = 0; i < n; i++)
if (uv_mutex_init(locks + i))
- abort();
+ ABORT();
}
@@ -3466,7 +3466,7 @@ void SignBase::CheckThrow(SignBase::Error error) {
case kSignPublicKey:
return env()->ThrowError("PEM_read_bio_PUBKEY failed");
default:
- abort();
+ ABORT();
}
}
diff --git a/src/node_crypto_bio.cc b/src/node_crypto_bio.cc
index c28e118c3b..ca0d0ba97e 100644
--- a/src/node_crypto_bio.cc
+++ b/src/node_crypto_bio.cc
@@ -172,7 +172,7 @@ long NodeBIO::Ctrl(BIO* bio, int cmd, long num, void* ptr) {
break;
case BIO_C_SET_BUF_MEM:
CHECK(0 && "Can't use SET_BUF_MEM_PTR with NodeBIO");
- abort();
+ ABORT();
break;
case BIO_C_GET_BUF_MEM_PTR:
CHECK(0 && "Can't use GET_BUF_MEM_PTR with NodeBIO");
diff --git a/src/spawn_sync.cc b/src/spawn_sync.cc
index 144af3e747..62fadb4396 100644
--- a/src/spawn_sync.cc
+++ b/src/spawn_sync.cc
@@ -485,7 +485,7 @@ void SyncProcessRunner::TryInitializeAndRunLoop(Local<Value> options) {
r = uv_run(uv_loop_, UV_RUN_DEFAULT);
if (r < 0)
// We can't handle uv_run failure.
- abort();
+ ABORT();
// If we get here the process should have exited.
CHECK_GE(exit_status_, 0);
@@ -508,7 +508,7 @@ void SyncProcessRunner::CloseHandlesAndDeleteLoop() {
// callbacks called.
int r = uv_run(uv_loop_, UV_RUN_DEFAULT);
if (r < 0)
- abort();
+ ABORT();
CHECK_EQ(uv_loop_close(uv_loop_), 0);
delete uv_loop_;
diff --git a/src/stream_wrap.cc b/src/stream_wrap.cc
index cd9b2c9064..120e2c4d50 100644
--- a/src/stream_wrap.cc
+++ b/src/stream_wrap.cc
@@ -179,7 +179,7 @@ static Local<Object> AcceptHandle(Environment* env, StreamWrap* parent) {
handle = wrap->UVHandle();
if (uv_accept(parent->stream(), reinterpret_cast<uv_stream_t*>(handle)))
- abort();
+ ABORT();
return scope.Escape(wrap_obj);
}
diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc
index b466afb152..fc00893b77 100644
--- a/src/tls_wrap.cc
+++ b/src/tls_wrap.cc
@@ -152,7 +152,7 @@ void TLSWrap::InitSSL() {
SSL_set_connect_state(ssl_);
} else {
// Unexpected
- abort();
+ ABORT();
}
// Initialize ring for queud clear data
diff --git a/src/tty_wrap.cc b/src/tty_wrap.cc
index 76a2472f8a..a78d231145 100644
--- a/src/tty_wrap.cc
+++ b/src/tty_wrap.cc
@@ -72,7 +72,7 @@ void TTYWrap::GuessHandleType(const FunctionCallbackInfo<Value>& args) {
case UV_NAMED_PIPE: type = "PIPE"; break;
case UV_UNKNOWN_HANDLE: type = "UNKNOWN"; break;
default:
- abort();
+ ABORT();
}
args.GetReturnValue().Set(OneByteString(env->isolate(), type));
diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc
index 4c0d38dfb2..dff2235f9f 100644
--- a/src/udp_wrap.cc
+++ b/src/udp_wrap.cc
@@ -166,7 +166,7 @@ void UDPWrap::DoBind(const FunctionCallbackInfo<Value>& args, int family) {
break;
default:
CHECK(0 && "unexpected address family");
- abort();
+ ABORT();
}
if (err == 0) {
@@ -278,7 +278,7 @@ void UDPWrap::DoSend(const FunctionCallbackInfo<Value>& args, int family) {
break;
default:
CHECK(0 && "unexpected address family");
- abort();
+ ABORT();
}
if (err == 0) {
diff --git a/src/util.h b/src/util.h
index 24c633e286..eb743b6246 100644
--- a/src/util.h
+++ b/src/util.h
@@ -18,11 +18,18 @@ namespace node {
TypeName(const TypeName&) = delete; \
TypeName(TypeName&&) = delete
+// Windows 8+ does not like abort() in Release mode
+#ifdef _WIN32
+#define ABORT() raise(SIGABRT)
+#else
+#define ABORT() abort()
+#endif
+
#if defined(NDEBUG)
# define ASSERT(expression)
# define CHECK(expression) \
do { \
- if (!(expression)) abort(); \
+ if (!(expression)) ABORT(); \
} while (0)
#else
# define ASSERT(expression) assert(expression)
@@ -43,7 +50,7 @@ namespace node {
#define CHECK_LT(a, b) CHECK((a) < (b))
#define CHECK_NE(a, b) CHECK((a) != (b))
-#define UNREACHABLE() abort()
+#define UNREACHABLE() ABORT()
// TAILQ-style intrusive list node.
template <typename T>