Skip to content

Document that the ObjectWrap example code doesn't work for multi-context usage #711

Closed

Description

@geekuillaume

After spending a day trying to debug why I had so many seemingly random issues with my code, I finally understood why: the object wrap example code is not compatible with a multi-context usage of the addon.

Explanation: this example set the constructor static member of the class to a reference of the constructor function but if the addon is loaded multiple time (with worker_threads for example), the value is overwritten by a new reference in the new context. That makes this reference unusable to create new instances of this wrapped class from other C++ code and makes any code wanting to use this reference in another context crash.

We should at least make sure there is a warning about this in the documentation. The best would be to provide a workaround with the new addon instance data support maybe.

Activity

  1. mhdawson commented on May 6, 2020

    @mhdawson
    Member

    @geekuillaume any chance you'd like to submit a PR to the docs to cover this?

  2. markirish commented on May 11, 2020

    @markirish

    @geekuillaume what kind of errors were you seeing?

    I am seeing some errors with HandleScopes in an AsyncWorker's OnOk() when using worker_threads. Looking at similar issues across other repos, it seems the issue is 'context-aware addons', but being a node-addon-api addon (and therefore a N-API addon) I don't think I'm doing anything wrong as far as declaring the module.

    I'm not sure if this is the same issue you are running into, but seems possible.

  3. added a commit that references this issue on Aug 24, 2022
  4. added a commit that references this issue on Aug 26, 2022
  5. added a commit that references this issue on Sep 19, 2022
  6. added a commit that references this issue on Aug 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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