Skip to content

Commit

Permalink
fix(ext/node): make next tick queue resilient to Array.prototype ta…
Browse files Browse the repository at this point in the history
…mpering (#24361)

Closes #24358.
  • Loading branch information
0f-0b committed Jun 27, 2024
1 parent 67dcd6d commit 8d14a9d
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions ext/node/polyfills/internal/fixed_queue.ts
Original file line number Diff line number Diff line change
@@ -1,8 1,8 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
// Copyright Joyent, Inc. and other Node contributors.

// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
import { primordials } from "ext:core/mod.js";
const { ArrayFrom } = primordials;

// Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two.
const kSize = 2048;
Expand Down Expand Up @@ -65,7 65,7 @@ class FixedCircularBuffer {
constructor() {
this.bottom = 0;
this.top = 0;
this.list = new Array(kSize);
this.list = ArrayFrom({ __proto__: null, length: kSize });
this.next = null;
}

Expand Down Expand Up @@ -111,11 111,13 @@ export class FixedQueue {
// and sets it as the new main queue.
this.head = this.head.next = new FixedCircularBuffer();
}
// deno-lint-ignore prefer-primordials -- `push` is a method of `FixedCircularBuffer`
this.head.push(data);
}

shift() {
const tail = this.tail;
// deno-lint-ignore prefer-primordials -- `shift` is a method of `FixedCircularBuffer`
const next = tail.shift();
if (tail.isEmpty() && tail.next !== null) {
// If there is another queue, it forms the new tail.
Expand Down

0 comments on commit 8d14a9d

Please sign in to comment.