Skip to content

Refactor throwing uncaught exceptions from callbacks dispatched onto the event loop from C++ #6772

@kraenhansen

Description

@kraenhansen

We should find a more general approach (ideally driven by the binding generator templates) to throw uncaught exceptions when JS callbacks dispatched on the event loop from C++, throws. We're currently wrapping some of our listener APIs in a pattern that catch errors from callback and use setImmediate to rethrow from a new task scheduled from JS, but we have many callbacks that doesn't have this manual "workaround".

I've pushed https://github.com/realm/realm-js/tree/kh/fix-throwing-callbacks as a starting point, disabling the workaround and adding a few failing tests that are now causing aborts.


My current thinking is that we should implement platform specific "EventLoopDispatchers" wrapping Core's util::EventLoopDispatcher used here:

return shouldBlock ? `schedulerWrapBlockingFunction(${lambda})` : `util::EventLoopDispatcher(${lambda})`;
or a realm::util::Scheduler and set this as "default" the way I did in #6791. The platform dispatcher should wrap the lambda with a try-catch which reports the error as an uncaught exception using platform specific runtime APIs.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions