src: don't create Undefined if not needed

This commit moves the creation of argv and only creates an undefined
value if the passed in status was not 0.

The variable name client_handle was already used in this function but
I've change that usage so that this variable name matches the
onconnection callback functions parameter name clientHandle.

PR-URL: https://github.com/nodejs/node/pull/20573
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
Daniel Bevenius 2018-05-07 14:06:56 +02:00
parent 36793b8c65
commit 590769bb96

View File

@ -45,10 +45,7 @@ void ConnectionWrap<WrapType, UVType>::OnConnection(uv_stream_t* handle,
// uv_close() on the handle.
CHECK_EQ(wrap_data->persistent().IsEmpty(), false);
Local<Value> argv[] = {
Integer::New(env->isolate(), status),
Undefined(env->isolate())
};
Local<Value> client_handle;
if (status == 0) {
// Instantiate the client javascript object and handle.
@ -59,17 +56,20 @@ void ConnectionWrap<WrapType, UVType>::OnConnection(uv_stream_t* handle,
// Unwrap the client javascript object.
WrapType* wrap;
ASSIGN_OR_RETURN_UNWRAP(&wrap, client_obj);
uv_stream_t* client_handle =
reinterpret_cast<uv_stream_t*>(&wrap->handle_);
uv_stream_t* client = reinterpret_cast<uv_stream_t*>(&wrap->handle_);
// uv_accept can fail if the new connection has already been closed, in
// which case an EAGAIN (resource temporarily unavailable) will be
// returned.
if (uv_accept(handle, client_handle))
if (uv_accept(handle, client))
return;
// Successful accept. Call the onconnection callback in JavaScript land.
argv[1] = client_obj;
client_handle = client_obj;
} else {
client_handle = Undefined(env->isolate());
}
Local<Value> argv[] = { Integer::New(env->isolate(), status), client_handle };
wrap_data->MakeCallback(env->onconnection_string(), arraysize(argv), argv);
}