Skip to content

Commit

Permalink
worker: rename error code to be more accurate
Browse files Browse the repository at this point in the history
Rename `ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`
to `ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST` in order to be more
accurate.

PR-URL: #33872
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
  • Loading branch information
addaleax authored and jasnell committed Jun 25, 2020
1 parent 8e12962 commit 5ef5116
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 12 deletions.
29 changes: 25 additions & 4 deletions doc/api/errors.md
Expand Up @@ -1597,12 +1597,20 @@ strict compliance with the API specification (which in some cases may accept
For APIs that accept options objects, some options might be mandatory. This code
is thrown if a required option is missing.

<a id="ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST"></a>
### `ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`
<a id="ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST"></a>
### `ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST`
<!-- YAML
added: REPLACEME
-->

An object that needs to be explicitly listed in the `transferList` argument
was found in the object passed to a `postMessage()` call, but not provided in
the `transferList` for that call. Usually, this is a `MessagePort`.
was found in the object passed to a [`postMessage()`][] call, but not provided
in the `transferList` for that call. Usually, this is a `MessagePort`.

In Node.js versions prior to REPLACEME, the error code being used here was
[`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`][]. However, the set of
transferable object types has been expanded to cover more types than
`MessagePort`.

<a id="ERR_MISSING_PASSPHRASE"></a>
### `ERR_MISSING_PASSPHRASE`
Expand Down Expand Up @@ -2442,6 +2450,16 @@ Used when an invalid character is found in an HTTP response status message
-->
A given index was out of the accepted range (e.g. negative offsets).

<a id="ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST"></a>
### `ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`
<!-- YAML
removed: REPLACEME
-->

This error code was replaced by [`ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST`][]
in Node.js REPLACEME, because it is no longer accurate as other types of
transferable objects also exist now.

<a id="ERR_NAPI_CONS_PROTOTYPE_OBJECT"></a>
### `ERR_NAPI_CONS_PROTOTYPE_OBJECT`
<!-- YAML
Expand Down Expand Up @@ -2693,6 +2711,8 @@ such as `process.stdout.on('data')`.
[`--force-fips`]: cli.html#cli_force_fips
[`Class: assert.AssertionError`]: assert.html#assert_class_assert_assertionerror
[`ERR_INVALID_ARG_TYPE`]: #ERR_INVALID_ARG_TYPE
[`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`]: #ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST
[`ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST`]: #ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST
[`EventEmitter`]: events.html#events_class_eventemitter
[`MessagePort`]: worker_threads.html#worker_threads_class_messageport
[`Object.getPrototypeOf`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf
Expand Down Expand Up @@ -2725,6 +2745,7 @@ such as `process.stdout.on('data')`.
[`net`]: net.html
[`new URL(input)`]: url.html#url_new_url_input_base
[`new URLSearchParams(iterable)`]: url.html#url_new_urlsearchparams_iterable
[`postMessage()`]: worker_threads.html#worker_threads_port_postmessage_value_transferlist
[`process.on('exit')`]: process.html#Event:-`'exit'`
[`process.send()`]: process.html#process_process_send_message_sendhandle_options_callback
[`process.setUncaughtExceptionCaptureCallback()`]: process.html#process_process_setuncaughtexceptioncapturecallback_fn
Expand Down
4 changes: 2 additions & 2 deletions src/node_errors.h
Expand Up @@ -43,7 +43,7 @@ void OnFatalError(const char* location, const char* message);
V(ERR_MEMORY_ALLOCATION_FAILED, Error) \
V(ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE, Error) \
V(ERR_MISSING_ARGS, TypeError) \
V(ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST, TypeError) \
V(ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST, TypeError) \
V(ERR_MISSING_PASSPHRASE, TypeError) \
V(ERR_MISSING_PLATFORM_FOR_WORKER, Error) \
V(ERR_NON_CONTEXT_AWARE_DISABLED, Error) \
Expand Down Expand Up @@ -98,7 +98,7 @@ void OnFatalError(const char* location, const char* message);
V(ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE, \
"A message object could not be deserialized successfully in the target " \
"vm.Context") \
V(ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST, \
V(ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST, \
"Object that needs transfer was found in message but not listed " \
"in transferList") \
V(ERR_MISSING_PLATFORM_FOR_WORKER, \
Expand Down
4 changes: 1 addition & 3 deletions src/node_messaging.cc
Expand Up @@ -354,9 +354,7 @@ class SerializerDelegate : public ValueSerializer::Delegate {
ThrowDataCloneError(env_->clone_unsupported_type_str());
return Nothing<bool>();
} else if (mode == BaseObject::TransferMode::kTransferable) {
// TODO(addaleax): This message code is too specific. Fix that in a
// semver-major follow-up.
THROW_ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST(env_);
THROW_ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST(env_);
return Nothing<bool>();
}

Expand Down
Expand Up @@ -14,8 +14,7 @@ const { once } = require('events');
assert.throws(() => {
port1.postMessage(fh);
}, {
// See the TODO about error code in node_messaging.cc.
code: 'ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST'
code: 'ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST'
});

// Check that transferring FileHandle instances works.
Expand Down
2 changes: 1 addition & 1 deletion test/parallel/test-worker-workerdata-messageport.js
Expand Up @@ -54,7 +54,7 @@ const meowScript = () => 'meow';
workerData,
transferList: []
}), {
code: 'ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST',
code: 'ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST',
message: 'Object that needs transfer was found in message but not ' +
'listed in transferList'
});
Expand Down

0 comments on commit 5ef5116

Please sign in to comment.