tty: do not add `shutdown` method to handle
authorFedor Indutny <fedor@indutny.com>
Thu, 5 Mar 2015 16:04:00 +0000 (11:04 -0500)
committerFedor Indutny <fedor@indutny.com>
Thu, 5 Mar 2015 18:38:22 +0000 (13:38 -0500)
UV_TTY does not support `uv_shutdown()` so adding this method in
StreamBase will cause an `abort()` in C land.

Fix: https://github.com/iojs/io.js/issues/1068
PR-URL: https://github.com/iojs/io.js/pull/1073
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
src/stream_base-inl.h
src/stream_base.h
src/tty_wrap.cc
test/parallel/test-regress-GH-io-1068.js [new file with mode: 0644]

index 4909094..46d9f78 100644 (file)
@@ -37,7 +37,8 @@ void StreamBase::AddMethods(Environment* env,
 
   env->SetProtoMethod(t, "readStart", JSMethod<Base, &StreamBase::ReadStart>);
   env->SetProtoMethod(t, "readStop", JSMethod<Base, &StreamBase::ReadStop>);
-  env->SetProtoMethod(t, "shutdown", JSMethod<Base, &StreamBase::Shutdown>);
+  if ((flags & kFlagNoShutdown) == 0)
+    env->SetProtoMethod(t, "shutdown", JSMethod<Base, &StreamBase::Shutdown>);
   if ((flags & kFlagHasWritev) != 0)
     env->SetProtoMethod(t, "writev", JSMethod<Base, &StreamBase::Writev>);
   env->SetProtoMethod(t,
index dcbde09..5718f07 100644 (file)
@@ -160,7 +160,8 @@ class StreamBase : public StreamResource {
  public:
   enum Flags {
     kFlagNone = 0x0,
-    kFlagHasWritev = 0x1
+    kFlagHasWritev = 0x1,
+    kFlagNoShutdown = 0x2
   };
 
   template <class Base>
index 186f2f0..eaec271 100644 (file)
@@ -39,7 +39,7 @@ void TTYWrap::Initialize(Handle<Object> target,
   env->SetProtoMethod(t, "close", HandleWrap::Close);
   env->SetProtoMethod(t, "unref", HandleWrap::Unref);
 
-  StreamWrap::AddMethods(env, t);
+  StreamWrap::AddMethods(env, t, StreamBase::kFlagNoShutdown);
 
   env->SetProtoMethod(t, "getWindowSize", TTYWrap::GetWindowSize);
   env->SetProtoMethod(t, "setRawMode", SetRawMode);
diff --git a/test/parallel/test-regress-GH-io-1068.js b/test/parallel/test-regress-GH-io-1068.js
new file mode 100644 (file)
index 0000000..e769e6b
--- /dev/null
@@ -0,0 +1 @@
+process.stdin.emit('end');