diff --git a/doc/api/cli.md b/doc/api/cli.md index f7b025c961fced..66714b12bdcba3 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -2164,39 +2164,6 @@ added: v12.0.0 Set default [`tls.DEFAULT_MIN_VERSION`][] to 'TLSv1.3'. Use to disable support for TLSv1.2, which is not as secure as TLSv1.3. -### `--trace-atomics-wait` - - - -> Stability: 0 - Deprecated - -Print short summaries of calls to [`Atomics.wait()`][] to stderr. -The output could look like this: - -```text -(node:15701) [Thread 0] Atomics.wait(<address> + 0, 1, inf) started -(node:15701) [Thread 0] Atomics.wait(<address> + 0, 1, inf) did not wait because the values mismatched -(node:15701) [Thread 0] Atomics.wait(<address> + 0, 0, 10) started -(node:15701) [Thread 0] Atomics.wait(<address> + 0, 0, 10) timed out -(node:15701) [Thread 0] Atomics.wait(<address> + 4, 0, inf) started -(node:15701) [Thread 1] Atomics.wait(<address> + 4, -1, inf) started -(node:15701) [Thread 0] Atomics.wait(<address> + 4, 0, inf) was woken up by another thread -(node:15701) [Thread 1] Atomics.wait(<address> + 4, -1, inf) was woken up by another thread -``` - -The fields here correspond to: - -* The thread id as given by [`worker_threads.threadId`][] -* The base address of the `SharedArrayBuffer` in question, as well as the - byte offset corresponding to the index passed to `Atomics.wait()` -* The expected value that was passed to `Atomics.wait()` -* The timeout passed to `Atomics.wait` - ### `--trace-deprecation` -Type: Runtime +Type: End-of-Life -The [`--trace-atomics-wait`][] flag is deprecated because +The `--trace-atomics-wait` flag has been removed because it uses the V8 hook `SetAtomicsWaitCallback`, that will be removed in a future V8 release. @@ -3650,7 +3653,6 @@ is deprecated to better align with recommendations per [NIST SP 800-38D][]. [`--force-node-api-uncaught-exceptions-policy`]: cli.md#--force-node-api-uncaught-exceptions-policy [`--pending-deprecation`]: cli.md#--pending-deprecation [`--throw-deprecation`]: cli.md#--throw-deprecation -[`--trace-atomics-wait`]: cli.md#--trace-atomics-wait [`--unhandled-rejections`]: cli.md#--unhandled-rejectionsmode [`Buffer.allocUnsafeSlow(size)`]: buffer.md#static-method-bufferallocunsafeslowsize [`Buffer.from(array)`]: buffer.md#static-method-bufferfromarray diff --git a/doc/node.1 b/doc/node.1 index d3c9ce8981d886..5029f62d90da00 100644 --- a/doc/node.1 +++ b/doc/node.1 @@ -481,11 +481,6 @@ but the option is supported for compatibility with older Node.js versions. Set default minVersion to 'TLSv1.3'. Use to disable support for TLSv1.2 in favour of TLSv1.3, which is more secure. . -.It Fl -trace-atomics-wait -Print short summaries of calls to -.Sy Atomics.wait() . -. -This flag is deprecated. .It Fl -trace-deprecation Print stack traces for deprecations. . diff --git a/src/node.cc b/src/node.cc index 5d730985bfea4a..9fb31b84fea162 100644 --- a/src/node.cc +++ b/src/node.cc @@ -214,44 +214,6 @@ void Environment::InitializeInspector( } #endif // HAVE_INSPECTOR -#define ATOMIC_WAIT_EVENTS(V) \ - V(kStartWait, "started") \ - V(kWokenUp, "was woken up by another thread") \ - V(kTimedOut, "timed out") \ - V(kTerminatedExecution, "was stopped by terminated execution") \ - V(kAPIStopped, "was stopped through the embedder API") \ - V(kNotEqual, "did not wait because the values mismatched") \ - -static void AtomicsWaitCallback(Isolate::AtomicsWaitEvent event, - Local array_buffer, - size_t offset_in_bytes, int64_t value, - double timeout_in_ms, - Isolate::AtomicsWaitWakeHandle* stop_handle, - void* data) { - Environment* env = static_cast(data); - - const char* message = "(unknown event)"; - switch (event) { -#define V(key, msg) \ - case Isolate::AtomicsWaitEvent::key: \ - message = msg; \ - break; - ATOMIC_WAIT_EVENTS(V) -#undef V - } - - fprintf(stderr, - "(node:%d) [Thread %" PRIu64 "] Atomics.wait(%p + %zx, %" PRId64 - ", %.f) %s\n", - static_cast(uv_os_getpid()), - env->thread_id(), - array_buffer->Data(), - offset_in_bytes, - value, - timeout_in_ms, - message); -} - void Environment::InitializeDiagnostics() { isolate_->GetHeapProfiler()->AddBuildEmbedderGraphCallback( Environment::BuildEmbedderGraph, this); @@ -260,17 +222,6 @@ void Environment::InitializeDiagnostics() { } if (options_->trace_uncaught) isolate_->SetCaptureStackTraceForUncaughtExceptions(true); - if (options_->trace_atomics_wait) { - ProcessEmitDeprecationWarning( - Environment::GetCurrent(isolate_), - "The flag --trace-atomics-wait is deprecated.", - "DEP0165"); - isolate_->SetAtomicsWaitCallback(AtomicsWaitCallback, this); - AddCleanupHook([](void* data) { - Environment* env = static_cast(data); - env->isolate()->SetAtomicsWaitCallback(nullptr, nullptr); - }, this); - } if (options_->trace_promises) { isolate_->SetPromiseHook(TracePromises); } diff --git a/src/node_options.cc b/src/node_options.cc index 146812c89c74c2..c43a5221d6b629 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -668,10 +668,6 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { "throw an exception on deprecations", &EnvironmentOptions::throw_deprecation, kAllowedInEnvvar); - AddOption("--trace-atomics-wait", - "(deprecated) trace Atomics.wait() operations", - &EnvironmentOptions::trace_atomics_wait, - kAllowedInEnvvar); AddOption("--trace-deprecation", "show stack traces on deprecations", &EnvironmentOptions::trace_deprecation, diff --git a/src/node_options.h b/src/node_options.h index cf744f13cd8f59..6a8709bcd4daf9 100644 --- a/src/node_options.h +++ b/src/node_options.h @@ -179,7 +179,6 @@ class EnvironmentOptions : public Options { std::string test_shard; std::vector test_skip_pattern; bool throw_deprecation = false; - bool trace_atomics_wait = false; bool trace_deprecation = false; bool trace_exit = false; bool trace_sync_io = false; diff --git a/test/parallel/test-trace-atomic-deprecation.js b/test/parallel/test-trace-atomic-deprecation.js deleted file mode 100644 index 8aeddb28e938d2..00000000000000 --- a/test/parallel/test-trace-atomic-deprecation.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const common = require('../common'); -const assert = require('node:assert'); -const { test } = require('node:test'); - -test('should emit deprecation warning DEP0165', async () => { - const { code, stdout, stderr } = await common.spawnPromisified( - process.execPath, ['--trace-atomics-wait', '-e', '{}'] - ); - assert.match(stderr, /\[DEP0165\] DeprecationWarning:/); - assert.strictEqual(stdout, ''); - assert.strictEqual(code, 0); -}); diff --git a/test/parallel/test-trace-atomics-wait.js b/test/parallel/test-trace-atomics-wait.js deleted file mode 100644 index 6449a2be2b47e0..00000000000000 --- a/test/parallel/test-trace-atomics-wait.js +++ /dev/null @@ -1,101 +0,0 @@ -'use strict'; -require('../common'); -const assert = require('assert'); -const child_process = require('child_process'); -const { Worker } = require('worker_threads'); - -if (process.argv[2] === 'child') { - const i32arr = new Int32Array(new SharedArrayBuffer(8)); - assert.strictEqual(Atomics.wait(i32arr, 0, 1), 'not-equal'); - assert.strictEqual(Atomics.wait(i32arr, 0, 0, 10), 'timed-out'); - - new Worker(` - const i32arr = require('worker_threads').workerData; - Atomics.store(i32arr, 1, -1); - Atomics.notify(i32arr, 1); - Atomics.wait(i32arr, 1, -1); - `, { eval: true, workerData: i32arr }); - - Atomics.wait(i32arr, 1, 0); - assert.strictEqual(Atomics.load(i32arr, 1), -1); - Atomics.store(i32arr, 1, 0); - Atomics.notify(i32arr, 1); - return; -} - -const proc = child_process.spawnSync( - process.execPath, - [ '--disable-warning=DEP0165', '--trace-atomics-wait', __filename, 'child' ], - { encoding: 'utf8', stdio: [ 'inherit', 'inherit', 'pipe' ] }); - -if (proc.status !== 0) console.log(proc); -assert.strictEqual(proc.status, 0); - -const SABAddress = proc.stderr.match(/Atomics\.wait\((?.+) \+/).groups.SAB; -const actualTimeline = proc.stderr - .replace(new RegExp(SABAddress, 'g'), '
') - .replace(new RegExp(`\\(node:${proc.pid}\\) `, 'g'), '') - .replace(/\binf(inity)?\b/gi, 'inf') - .replace(/\r/g, '') - .trim(); -console.log('+++ normalized stdout +++'); -console.log(actualTimeline); -console.log('--- normalized stdout ---'); - -const begin = -`[Thread 0] Atomics.wait(
+ 0, 1, inf) started -[Thread 0] Atomics.wait(
+ 0, 1, inf) did not wait because the \ -values mismatched -[Thread 0] Atomics.wait(
+ 0, 0, 10) started -[Thread 0] Atomics.wait(
+ 0, 0, 10) timed out`; - -const expectedTimelines = [ - `${begin} -[Thread 0] Atomics.wait(
+ 4, 0, inf) started -[Thread 1] Atomics.wait(
+ 4, -1, inf) started -[Thread 0] Atomics.wait(
+ 4, 0, inf) was woken up by another thread -[Thread 1] Atomics.wait(
+ 4, -1, inf) was woken up by another thread`, - `${begin} -[Thread 1] Atomics.wait(
+ 4, 0, inf) started -[Thread 0] Atomics.wait(
+ 4, -1, inf) started -[Thread 0] Atomics.wait(
+ 4, 0, inf) was woken up by another thread -[Thread 1] Atomics.wait(
+ 4, -1, inf) was woken up by another thread`, - `${begin} -[Thread 0] Atomics.wait(
+ 4, 0, inf) started -[Thread 0] Atomics.wait(
+ 4, 0, inf) was woken up by another thread -[Thread 1] Atomics.wait(
+ 4, -1, inf) started -[Thread 1] Atomics.wait(
+ 4, -1, inf) was woken up by another thread`, - `${begin} -[Thread 0] Atomics.wait(
+ 4, 0, inf) started -[Thread 0] Atomics.wait(
+ 4, 0, inf) was woken up by another thread -[Thread 1] Atomics.wait(
+ 4, -1, inf) started -[Thread 1] Atomics.wait(
+ 4, -1, inf) did not wait because the \ -values mismatched`, - `${begin} -[Thread 0] Atomics.wait(
+ 4, 0, inf) started -[Thread 1] Atomics.wait(
+ 4, -1, inf) started -[Thread 0] Atomics.wait(
+ 4, 0, inf) was woken up by another thread -[Thread 1] Atomics.wait(
+ 4, -1, inf) did not wait because the \ -values mismatched`, - `${begin} -[Thread 1] Atomics.wait(
+ 4, 0, inf) started -[Thread 0] Atomics.wait(
+ 4, -1, inf) started -[Thread 0] Atomics.wait(
+ 4, 0, inf) was woken up by another thread -[Thread 1] Atomics.wait(
+ 4, -1, inf) did not wait because the \ -values mismatched`, - `${begin} -[Thread 0] Atomics.wait(
+ 4, 0, inf) started -[Thread 0] Atomics.wait(
+ 4, 0, inf) did not wait because the \ -values mismatched -[Thread 1] Atomics.wait(
+ 4, -1, inf) started -[Thread 1] Atomics.wait(
+ 4, -1, inf) did not wait because the \ -values mismatched`, - `${begin} -[Thread 1] Atomics.wait(
+ 4, -1, inf) started -[Thread 0] Atomics.wait(
+ 4, 0, inf) started -[Thread 0] Atomics.wait(
+ 4, 0, inf) did not wait because the \ -values mismatched -[Thread 1] Atomics.wait(
+ 4, -1, inf) was woken up by another thread`, -]; - -assert(expectedTimelines.includes(actualTimeline));