diff options
author | Fedor Indutny <fedor.indutny@gmail.com> | 2014-01-24 22:08:25 +0400 |
---|---|---|
committer | Fedor Indutny <fedor.indutny@gmail.com> | 2014-01-24 22:09:42 +0400 |
commit | 640912d18a63704fd493059a72b19e6367c2fc1c (patch) | |
tree | 2ad0e6e465dd981897f89d218d5a354f00fa9cf6 /src/stream_wrap.cc | |
parent | d019eac5b5fe3522f527547046a9baef8ab9572c (diff) | |
download | android-node-v8-640912d18a63704fd493059a72b19e6367c2fc1c.tar.gz android-node-v8-640912d18a63704fd493059a72b19e6367c2fc1c.tar.bz2 android-node-v8-640912d18a63704fd493059a72b19e6367c2fc1c.zip |
tls_wrap: propagate errors to write callbacks
fix #6903
Diffstat (limited to 'src/stream_wrap.cc')
-rw-r--r-- | src/stream_wrap.cc | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/stream_wrap.cc b/src/stream_wrap.cc index 3b361f7a05..e0079b8136 100644 --- a/src/stream_wrap.cc +++ b/src/stream_wrap.cc @@ -215,6 +215,9 @@ void StreamWrap::WriteBuffer(const FunctionCallbackInfo<Value>& args) { req_wrap->Dispatched(); req_wrap_obj->Set(env->bytes_string(), Integer::NewFromUnsigned(length, node_isolate)); + const char* msg = wrap->callbacks()->Error(); + if (msg != NULL) + req_wrap_obj->Set(env->error_string(), OneByteString(env->isolate(), msg)); if (err) { req_wrap->~WriteWrap(); @@ -300,6 +303,9 @@ void StreamWrap::WriteStringImpl(const FunctionCallbackInfo<Value>& args) { req_wrap->Dispatched(); req_wrap->object()->Set(env->bytes_string(), Integer::NewFromUnsigned(data_size, node_isolate)); + const char* msg = wrap->callbacks()->Error(); + if (msg != NULL) + req_wrap_obj->Set(env->error_string(), OneByteString(env->isolate(), msg)); if (err) { req_wrap->~WriteWrap(); @@ -401,6 +407,9 @@ void StreamWrap::Writev(const FunctionCallbackInfo<Value>& args) { req_wrap->Dispatched(); req_wrap->object()->Set(env->bytes_string(), Number::New(node_isolate, bytes)); + const char* msg = wrap->callbacks()->Error(); + if (msg != NULL) + req_wrap_obj->Set(env->error_string(), OneByteString(env->isolate(), msg)); if (err) { req_wrap->~WriteWrap(); @@ -441,14 +450,19 @@ void StreamWrap::AfterWrite(uv_write_t* req, int status) { // Unref handle property Local<Object> req_wrap_obj = req_wrap->object(); req_wrap_obj->Delete(env->handle_string()); - wrap->callbacks_->AfterWrite(req_wrap); + wrap->callbacks()->AfterWrite(req_wrap); Local<Value> argv[] = { Integer::New(status, node_isolate), wrap->object(), - req_wrap_obj + req_wrap_obj, + Undefined() }; + const char* msg = wrap->callbacks()->Error(); + if (msg != NULL) + argv[3] = OneByteString(env->isolate(), msg); + req_wrap->MakeCallback(env->oncomplete_string(), ARRAY_SIZE(argv), argv); req_wrap->~WriteWrap(); @@ -499,6 +513,11 @@ void StreamWrap::AfterShutdown(uv_shutdown_t* req, int status) { } +const char* StreamWrapCallbacks::Error() { + return NULL; +} + + int StreamWrapCallbacks::DoWrite(WriteWrap* w, uv_buf_t* bufs, size_t count, |