Skip to content

Node crashes when writing data on HTTP2 stream that meanwhile terminates #24037

Closed
@hermanbanken

Description

@hermanbanken
  • Version: v8.12.0
  • Platform: OSX, Darwin mymac.local 17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71.2~1/RELEASE_X86_64 x86_64
  • Subsystem: http2

When performing something along the lines of:

const http2Session = ...;
const outHeaders = { ... };
const req = http2Session.request({ ...outHeaders, [HTTP2_HEADER_PATH]: path });
const body: Buffer[] = [];
let headers: IncomingHttpHeaders = {};
req
      .on("response", (hs) => headers = hs)
      .on("data", (chunk) => body.push(chunk))
      .on("error", (error) => reject(error))
      .on("end", () => resolve({
        headers,
        status: parseInt(headers[HTTP2_HEADER_STATUS], 10),
        body: Buffer.concat(body),
      }));
req.end(Buffer.from("MYDATA"));

and the NGINX server becomes unavailable (shutsdown, GOAWAY, sessions close) sometimes we get the following error:

node[25931]: ../src/tls_wrap.cc:604:virtual int node::TLSWrap::DoWrite(node::WriteWrap *, uv_buf_t *, size_t, uv_stream_t *): Assertion `(ssl_) != (nullptr)' failed.
 1: node::Abort() [/Users/hbanken/.nvm/versions/node/v8.12.0/bin/node]
 2: node::(anonymous namespace)::DomainEnter(node::Environment*, v8::Local<v8::Object>) [/Users/hbanken/.nvm/versions/node/v8.12.0/bin/node]
 3: node::TLSWrap::DoWrite(node::WriteWrap*, uv_buf_t*, unsigned long, uv_stream_s*) [/Users/hbanken/.nvm/versions/node/v8.12.0/bin/node]
 4: node::http2::Http2Session::SendPendingData() [/Users/hbanken/.nvm/versions/node/v8.12.0/bin/node]
 5: node::http2::Http2Stream::RstStream(v8::FunctionCallbackInfo<v8::Value> const&) [/Users/hbanken/.nvm/versions/node/v8.12.0/bin/node]
 6: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) [/Users/hbanken/.nvm/versions/node/v8.12.0/bin/node]
 7: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) [/Users/hbanken/.nvm/versions/node/v8.12.0/bin/node]
 8: v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [/Users/hbanken/.nvm/versions/node/v8.12.0/bin/node]
 9: 0x3671961042fd
10: 0x3671961bd1d6

Expected behavior:

Native error is caught and converted in something NodeJS can handle instead of crashing the whole process.

Metadata

Metadata

Assignees

No one assigned

    Labels

    http2Issues or PRs related to the http2 subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions