GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — src: avoid draining platform tasks at FreeEnvironment by legendecas · Pull Request #51290 · nodejs/node

Conversation

@legendecas

@legendecas legendecas commented Dec 26, 2023

Copy link
Copy Markdown
Member

At the point of FreeEnvironment and onwards, no JavaScript execution
associated with the Environment should be triggered.

Avoid draining platform tasks that can trigger JavaScript execution in
FreeEnvironment. The holder of node::Environment should immediately
call node::MultiIsolatePlatform::UnregisterIsolate and
v8::Isolate::Dispose to cancel pending foreground tasks and join
concurrent tasks after the environment was freed.

NodePlatform can properly handle the case in RunForegroundTask when
an Isolate out-lives its associated node::Environment.

Fixes: #47748
Fixes: #49344

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

bricss, KhafraDev, paulrutter, Eomm, and tonivj5 reacted with thumbs up emoji jaydenseric and tonivj5 reacted with eyes emoji
All reactions
  • 👍 5 reactions
  • 👀 2 reactions
@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. process Issues and PRs related to the process subsystem. labels Dec 26, 2023
@legendecas
legendecas force-pushed the platform-tasks branch from f9c4eb9 to 0cd1a72 Compare December 26, 2023 17:51
@legendecas legendecas changed the title src: avoid draining tasks at FreeEnvironment src: avoid draining platform tasks at FreeEnvironment Dec 26, 2023
@legendecas
legendecas force-pushed the platform-tasks branch from 0cd1a72 to 8324ab0 Compare December 26, 2023 17:53
bcoe
bcoe reviewed Dec 27, 2023
View reviewed changes
Comment thread src/node_main_instance.cc Outdated

@bcoe bcoe Dec 27, 2023

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is Isolate::DisallowJavascriptExecutionScope only called when DEBUG is set?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@legendecas legendecas Dec 28, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Disallowing JavaScript execution in this function is primarily a rule to avoid footguns, i.e. Environment has been freed and most Node.js APIs would not work. However, it is still valid to evaluate JavaScript as the Isolate has not been freed.

So, to enforce the rule, the Isolate::DisallowJavascriptExecutionScope is opened and will strictly crash the process if JavaScript is invoked in this scope. This would allow us to identify possible problems in debug build. While in the release build, it would be better to be more lenient and let the JavaScript run at the best effort.

I've updated the patch to include a comment about this.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

bcoe reacted with thumbs up emoji
All reactions
  • 👍 1 reaction
@lpinca lpinca added the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Dec 27, 2023
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Dec 27, 2023
@nodejs-github-bot

nodejs-github-bot commented Dec 27, 2023

Copy link
Copy Markdown
Collaborator

CI: https://ci.nodejs.org/job/node-test-pull-request/56561/

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@legendecas
src: avoid draining platform tasks at FreeEnvironment
beab806
At the point of `FreeEnvironment` and onwards, no JavaScript execution
associated with the Environment should be triggered.

Avoid draining platform tasks that can trigger JavaScript execution in
`FreeEnvironment`. The holder of `node::Environment` should immediately
call `node::MultiIsolatePlatform::UnregisterIsolate` and
`v8::Isolate::Dispose` to cancel pending foreground tasks and join
concurrent tasks after the environment was freed.

`NodePlatform` can properly handle the case in `RunForegroundTask` when
an Isolate out-lives its associated `node::Environment`.
@legendecas
legendecas force-pushed the platform-tasks branch from 8324ab0 to beab806 Compare December 28, 2023 14:59
bcoe
bcoe reviewed Dec 28, 2023
View reviewed changes

@bcoe bcoe left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, I'm excited to see if this addresses the deadlock with coverage.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@targos targos added the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Dec 28, 2023
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Dec 28, 2023
@nodejs-github-bot

nodejs-github-bot commented Dec 28, 2023

Copy link
Copy Markdown
Collaborator

CI: https://ci.nodejs.org/job/node-test-pull-request/56569/

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

H4ad
H4ad approved these changes Dec 28, 2023
View reviewed changes
@H4ad H4ad added author ready PRs with CI started, the required approvals, and no outstanding review comments. review wanted PRs that need review. labels Dec 28, 2023
mcollina
mcollina approved these changes Jan 8, 2024
View reviewed changes

@mcollina mcollina left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@mcollina mcollina added the commit-queue PRs queued for automated landing through the Commit Queue. label Jan 8, 2024
@mcollina mcollina mentioned this pull request Jan 8, 2024
v21.6.0 proposal #51342
Merged
@nodejs-github-bot nodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Jan 8, 2024
@nodejs-github-bot
nodejs-github-bot merged commit 5db35b4 into nodejs:main Jan 8, 2024
@nodejs-github-bot

nodejs-github-bot commented Jan 8, 2024

Copy link
Copy Markdown
Collaborator

Landed in 5db35b4

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@legendecas
legendecas deleted the platform-tasks branch January 8, 2024 14:41
@hhugo

hhugo commented Jan 8, 2024

Copy link
Copy Markdown

Thanks. Can we know which version version of node will first include this fix ?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@paulrutter

paulrutter commented Jan 8, 2024

Copy link
Copy Markdown

Will this be ported to the node 20.x branch? Thanks!

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@mcollina

mcollina commented Jan 9, 2024

Copy link
Copy Markdown
Member

If there are no unplanned side effects, yes!

mashpie and globalexport reacted with thumbs up emoji paulrutter reacted with hooray emoji
All reactions
  • 👍 2 reactions
  • 🎉 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

RafaelGSS pushed a commit that referenced this pull request Jan 11, 2024
@legendecas @RafaelGSS
src: avoid draining platform tasks at FreeEnvironment
a0ff00b
At the point of `FreeEnvironment` and onwards, no JavaScript execution
associated with the Environment should be triggered.

Avoid draining platform tasks that can trigger JavaScript execution in
`FreeEnvironment`. The holder of `node::Environment` should immediately
call `node::MultiIsolatePlatform::UnregisterIsolate` and
`v8::Isolate::Dispose` to cancel pending foreground tasks and join
concurrent tasks after the environment was freed.

`NodePlatform` can properly handle the case in `RunForegroundTask` when
an Isolate out-lives its associated `node::Environment`.

PR-URL: #51290
Fixes: #47748
Fixes: #49344
Reviewed-By: Vinícius Lourenço Claro Cardoso <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
marco-ippolito pushed a commit to marco-ippolito/node that referenced this pull request Jan 12, 2024
@legendecas @marco-ippolito
src: avoid draining platform tasks at FreeEnvironment
a9a1583
At the point of `FreeEnvironment` and onwards, no JavaScript execution
associated with the Environment should be triggered.

Avoid draining platform tasks that can trigger JavaScript execution in
`FreeEnvironment`. The holder of `node::Environment` should immediately
call `node::MultiIsolatePlatform::UnregisterIsolate` and
`v8::Isolate::Dispose` to cancel pending foreground tasks and join
concurrent tasks after the environment was freed.

`NodePlatform` can properly handle the case in `RunForegroundTask` when
an Isolate out-lives its associated `node::Environment`.

PR-URL: nodejs#51290
Fixes: nodejs#47748
Fixes: nodejs#49344
Reviewed-By: Vinícius Lourenço Claro Cardoso <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
Medhansh404 pushed a commit to Medhansh404/node that referenced this pull request Jan 19, 2024
@legendecas @Medhansh404
src: avoid draining platform tasks at FreeEnvironment
a738541
At the point of `FreeEnvironment` and onwards, no JavaScript execution
associated with the Environment should be triggered.

Avoid draining platform tasks that can trigger JavaScript execution in
`FreeEnvironment`. The holder of `node::Environment` should immediately
call `node::MultiIsolatePlatform::UnregisterIsolate` and
`v8::Isolate::Dispose` to cancel pending foreground tasks and join
concurrent tasks after the environment was freed.

`NodePlatform` can properly handle the case in `RunForegroundTask` when
an Isolate out-lives its associated `node::Environment`.

PR-URL: nodejs#51290
Fixes: nodejs#47748
Fixes: nodejs#49344
Reviewed-By: Vinícius Lourenço Claro Cardoso <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
richardlau pushed a commit that referenced this pull request Mar 25, 2024
@legendecas @richardlau
src: avoid draining platform tasks at FreeEnvironment
c190a05
At the point of `FreeEnvironment` and onwards, no JavaScript execution
associated with the Environment should be triggered.

Avoid draining platform tasks that can trigger JavaScript execution in
`FreeEnvironment`. The holder of `node::Environment` should immediately
call `node::MultiIsolatePlatform::UnregisterIsolate` and
`v8::Isolate::Dispose` to cancel pending foreground tasks and join
concurrent tasks after the environment was freed.

`NodePlatform` can properly handle the case in `RunForegroundTask` when
an Isolate out-lives its associated `node::Environment`.

PR-URL: #51290
Fixes: #47748
Fixes: #49344
Reviewed-By: Vinícius Lourenço Claro Cardoso <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
@richardlau richardlau mentioned this pull request Mar 25, 2024
v20.12.0 proposal #52212
Merged
codebytere added a commit to electron/electron that referenced this pull request Apr 14, 2024
@codebytere
src: avoid draining platform tasks at FreeEnvironment
e0661d0
nodejs/node#51290
codebytere added a commit to electron/electron that referenced this pull request Apr 16, 2024
@codebytere
src: avoid draining platform tasks at FreeEnvironment
76cc0ea
nodejs/node#51290
jkleinsc pushed a commit to electron/electron that referenced this pull request Apr 17, 2024
@electron-roller @zcbenz
@codebytere @patchup
chore: bump node to v20.12.2 (main) (#41710)
7120c58
* chore: bump node in DEPS to v20.12.0

* chore: update build_add_gn_build_files.patch

* chore: update patches

* chore: bump node in DEPS to v20.12.1

* chore: update patches

* build: encode non-ASCII Latin1 characters as one byte in JS2C

nodejs/node#51605

* crypto: use EVP_MD_fetch and cache EVP_MD for hashes

nodejs/node#51034

* chore: update filenames.json

* chore: bump node in DEPS to v20.12.2

* chore: update patches

* src: support configurable snapshot

nodejs/node#50453

* test: remove test-domain-error-types flaky designation

nodejs/node#51717

* src: avoid draining platform tasks at FreeEnvironment

nodejs/node#51290

* chore: fix accidentally deleted v8 dep

* lib: define FormData and fetch etc. in the built-in snapshot

nodejs/node#51598

* chore: rebase on main

* chore: remove stray log

---------

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Cheng <[email protected]>
Co-authored-by: Shelley Vohr <[email protected]>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
@mcollina mcollina mentioned this pull request May 16, 2024
v18.20.3 proposal #53028
Merged
richardlau pushed a commit that referenced this pull request May 16, 2024
@legendecas @richardlau
src: avoid draining platform tasks at FreeEnvironment
d9d9e62
At the point of `FreeEnvironment` and onwards, no JavaScript execution
associated with the Environment should be triggered.

Avoid draining platform tasks that can trigger JavaScript execution in
`FreeEnvironment`. The holder of `node::Environment` should immediately
call `node::MultiIsolatePlatform::UnregisterIsolate` and
`v8::Isolate::Dispose` to cancel pending foreground tasks and join
concurrent tasks after the environment was freed.

`NodePlatform` can properly handle the case in `RunForegroundTask` when
an Isolate out-lives its associated `node::Environment`.

PR-URL: #51290
Fixes: #47748
Fixes: #49344
Reviewed-By: Vinícius Lourenço Claro Cardoso <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
@richardlau richardlau added the backported-to-v18.x label May 16, 2024
codebytere added a commit to electron/electron that referenced this pull request May 31, 2024
@codebytere
src: avoid draining platform tasks at FreeEnvironment
a1ea056
nodejs/node#51290
codebytere added a commit to electron/electron that referenced this pull request Jun 1, 2024
@electron-roller @zcbenz
@codebytere @patchup
chore: bump node to v20.14.0 (30-x-y) (#42294)
3be3381
* chore: bump node in DEPS to v20.13.1

* chore: bump node in DEPS to v20.14.0

* chore: update build_add_gn_build_files.patch

* chore: update patches

* chore: update patches

* build: encode non-ASCII Latin1 characters as one byte in JS2C

nodejs/node#51605

* crypto: use EVP_MD_fetch and cache EVP_MD for hashes

nodejs/node#51034

* chore: update filenames.json

* chore: update patches

* src: support configurable snapshot

nodejs/node#50453

* test: remove test-domain-error-types flaky designation

nodejs/node#51717

* src: avoid draining platform tasks at FreeEnvironment

nodejs/node#51290

* chore: fix accidentally deleted v8 dep

* lib: define FormData and fetch etc. in the built-in snapshot

nodejs/node#51598

* chore: remove stray log

* crypto: enable NODE_EXTRA_CA_CERTS with BoringSSL

nodejs/node#52217

* test: skip test for dynamically linked OpenSSL

nodejs/node#52542

* lib, url: add a `windows` option to path parsing

nodejs/node#52509

* src: use dedicated routine to compile function for builtin CJS loader

nodejs/node#52016

* test: mark test as flaky

nodejs/node#52671

* build,tools: add test-ubsan ci

nodejs/node#46297

* src: preload function for Environment

nodejs/node#51539

* deps: update c-ares to 1.28.1

nodejs/node#52285

* chore: fixup

* events: extract addAbortListener for safe internal use

nodejs/node#52081

* module: print location of unsettled top-level await in entry points

nodejs/node#51999

* fs: add stacktrace to fs/promises

nodejs/node#49849

* chore: fixup indices

---------

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Cheng <[email protected]>
Co-authored-by: Shelley Vohr <[email protected]>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
@YOU54F YOU54F mentioned this pull request Jun 10, 2024
node sometimes hangs when NODE_V8_COVERAGE is set pact-foundation/pact-js#1074
Open
4 of 5 tasks
@Yanpei-Wang Yanpei-Wang mentioned this pull request Jul 15, 2026
[PUR-505] Bump Node toolchain to 18.20.4 to fix vitest worker exit livelock Circle-Cat/purrf#218
Merged
yhuang-circlecat pushed a commit to Circle-Cat/purrf that referenced this pull request Jul 15, 2026
@Yanpei-Wang @claude
[PUR-505] Bump Node toolchain to 18.20.4 to fix vitest worker exit li…
d93131d
…velock (#218)

## Problem

The recurring `frontend_unit_tests` TIMEOUT flake (`close timed out
after 120000ms` → `Failed to terminate worker while running ...`) is
caused by a bug in Node 18.19.1 itself, not by test code.

gdb backtrace of a live hung worker shows the livelock: on the worker's
**normal exit path**, `FreeEnvironment() → NodePlatform::DrainTasks()`
tries to drain the foreground task queue, but
`FinalizationRegistryCleanupTask`s keep re-spawning faster than they
drain — a native infinite loop at 100% CPU that `worker.terminate()`
cannot interrupt. The FinalizationRegistry instances come from jsdom's
`iterable-weak-set` (one per Document), which is why every test file is
equally exposed and the blamed filename in the error is arbitrary.

Upstream fix: nodejs/node#51290 (fixes nodejs/node#47748 "Infinite loop
at shutdown"), backported to Node 18.20.3+. We are pinned one patch line
short at 18.19.1.

## Fix

Bump the bazel Node toolchain to 18.20.4 — the newest 18.x bundled with
rules_nodejs 6.3.0, so no rules bump is needed.

## Verification

A/B/C stress runs of shard 10/10 under identical 9-shard concurrent load
(mimicking bazel's parallel shard execution):

| Node | Hangs |
|---|---|
| 18.19.1 (current) | 12 / 31 iterations (~39%) |
| 18.20.4 (this PR) | 0 / 60 |
| 18.20.8 | 0 / 60 |

Full bazel frontend suite on the 18.20.4 toolchain: 10/10 shards pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Fable 5 <[email protected]>
Yanpei-Wang added a commit to Circle-Cat/purrf that referenced this pull request Aug 15, 2026
@Yanpei-Wang @claude @github-actions
[PUR-505] Bump Node toolchain to 18.20.4 to fix vitest worker exit li…
88e2c72
…velock (#218)

## Problem

The recurring `frontend_unit_tests` TIMEOUT flake (`close timed out
after 120000ms` → `Failed to terminate worker while running ...`) is
caused by a bug in Node 18.19.1 itself, not by test code.

gdb backtrace of a live hung worker shows the livelock: on the worker's
**normal exit path**, `FreeEnvironment() → NodePlatform::DrainTasks()`
tries to drain the foreground task queue, but
`FinalizationRegistryCleanupTask`s keep re-spawning faster than they
drain — a native infinite loop at 100% CPU that `worker.terminate()`
cannot interrupt. The FinalizationRegistry instances come from jsdom's
`iterable-weak-set` (one per Document), which is why every test file is
equally exposed and the blamed filename in the error is arbitrary.

Upstream fix: nodejs/node#51290 (fixes nodejs/node#47748 "Infinite loop
at shutdown"), backported to Node 18.20.3+. We are pinned one patch line
short at 18.19.1.

## Fix

Bump the bazel Node toolchain to 18.20.4 — the newest 18.x bundled with
rules_nodejs 6.3.0, so no rules bump is needed.

## Verification

A/B/C stress runs of shard 10/10 under identical 9-shard concurrent load
(mimicking bazel's parallel shard execution):

| Node | Hangs |
|---|---|
| 18.19.1 (current) | 12 / 31 iterations (~39%) |
| 18.20.4 (this PR) | 0 / 60 |
| 18.20.8 | 0 / 60 |

Full bazel frontend suite on the 18.20.4 toolchain: 10/10 shards pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Fable 5 <[email protected]>
(cherry picked from commit d93131d)
davidnich added a commit to qoretechnologies/module-v8 that referenced this pull request Sep 25, 2026
@davidnich
fix: drain platform tasks before a program's isolate is unregistered
71d35ab
An async WebAssembly.compile() job still running on the platform worker
threads when a program was torn down could crash the process in
uv_async_send() (SIGSEGV at 0x78, a NULL uv_async_t): the
node::CommonEnvironmentSetup destructor unregisters the isolate from the
platform before disposing of it, and a compilation step completing in
between posts a foreground task to the per-isolate task runner whose
async handle is concurrently being nulled and closed.  Node's
FreeEnvironment() no longer drains the platform (nodejs/node#51290), so
deleteIntern() now drains all platform tasks after node::Stop(), while
the isolate is still registered, with JavaScript execution disallowed.

Also fixes bugs found while testing:
- JavaScriptPromise: the promise callback info held a V8 persistent
  handle without a weak program reference, so releasing a promise after
  its program was destroyed reset the handle in a disposed isolate
  (use-after-free)
- node's per-process initialization marked the process' stdio file
  descriptors close-on-exec, so all child processes started after the
  module was loaded (system(), backquote(), ...) ran without stdin,
  stdout, and stderr; stdio inheritance is now enabled
- JavaScriptObject::toData(): member functions of objects were bound to
  the function itself instead of the containing object as 'this'
@RyanSaxe RyanSaxe mentioned this pull request Oct 6, 2026
Require Node 22.0.0 RyanSaxe/pair#107
Merged
RyanSaxe added a commit to RyanSaxe/pair that referenced this pull request Oct 6, 2026
@RyanSaxe @claude
Require Node 22.0.0
93ae3e8
Node before 20.12.0 can spin at 100% CPU forever while a process exits
(nodejs/node#47748, fixed by nodejs/node#51290 in 20.12.0). It hung the
CI test job on Node 20.1.0, and a pair command, which talks to the hub
with fetch and exits on its own, can hit it too. Node 20 also reached
its end of life on April 30, 2026, so pair now requires the oldest Node
line that Node still supports.

engines.node is >=22.0.0, so requireNode() and pair check name 22.0.0.
CI tests 22.0.0, 22 and 24 in place of 20.1.0, 20 and 24, and the
README, the docs and guide/setup.md say Node 22.0.0 or newer.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@mcollina mcollina mcollina approved these changes
@H4ad H4ad H4ad approved these changes
+1 more reviewer
@bcoe bcoe bcoe left review comments
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

author ready PRs with CI started, the required approvals, and no outstanding review comments. c++ Issues and PRs that require attention from people who are familiar with C++. needs-ci PRs that need a full CI run. process Issues and PRs related to the process subsystem. review wanted PRs that need review.

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

The env var NODE_V8_COVERAGE intermittently causes the process to hang Infinite loop at shutdown

Uh oh!

There was an error while loading. Please reload this page.

10 participants

@legendecas @nodejs-github-bot @hhugo @paulrutter @mcollina @bcoe @H4ad @lpinca @targos @richardlau
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.