Skip to content

Referencing setImmediate prevents a Deno process from finishing #80

@wvbe

Description

@wvbe

I found this issue working with Deno (v1.23.3) and another library that has a transitive dependency on setimmediate. That bug report is here.

The bug is that if setimmediate is referenced in a Deno script, the deno script will never finish the process normally. Instead, Deno.exit() (similar to NodeJS process.exit()) must be called.

To reproduce:

  • Have Deno installed, or run it from a Docker container (eg. docker run -it --init denoland/deno:ubuntu sh)
  • Create a test.ts file with the following contents:
    import * as setImmediate from 'https://raw.githubusercontent.com/YuzuJS/setImmediate/master/setImmediate.js';
    console.log('End of program', setImmediate);
  • Run using deno run test.ts

Expected:

  • "End of program Module {}" is logged to console
  • The Deno process exits.

Observed:

  • "End of program Module {}" is logged to console
  • The Deno process never exits. It continues to idle.

I'm pretty sure this is caused by the opening of a MessageChannel and setting a message listener for one of the ports; https://github.com/YuzuJS/setImmediate/blob/master/setImmediate.js#L126

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions