Skip to content

Commit

Permalink
Ensure errors in preDeliver callback are handled
Browse files Browse the repository at this point in the history
Fixes #3848
  • Loading branch information
knolleary committed Oct 4, 2022
1 parent 93c1600 commit f4d7b71
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions packages/node_modules/@node-red/runtime/lib/flows/Flow.js
Original file line number Diff line number Diff line change
Expand Up @@ -818,6 +818,17 @@ function handlePreRoute(flow, sendEvent, reportError) {
})
}

function deliverMessageToDestination(sendEvent) {
if (sendEvent.destination.node) {
try {
sendEvent.destination.node.receive(sendEvent.msg);
} catch(err) {
const info = `${sendEvent.destination.node?.id}`
Log.error(`Error delivering message to node:${sendEvent.destination.node._path} [${sendEvent.destination.node.type}]`)
Log.error(err.stack)
}
}
}
function handlePreDeliver(flow,sendEvent, reportError) {
// preDeliver - the local router has identified the node it is going to send to. At this point, the message has been cloned if needed.
hooks.trigger("preDeliver",sendEvent,(err) => {
Expand All @@ -827,15 +838,10 @@ function handlePreDeliver(flow,sendEvent, reportError) {
} else if (err !== false) {
if (asyncMessageDelivery) {
setImmediate(function() {
if (sendEvent.destination.node) {
sendEvent.destination.node.receive(sendEvent.msg);
}
deliverMessageToDestination(sendEvent)
})
} else {
if (sendEvent.destination.node) {
sendEvent.destination.node.receive(sendEvent.msg);

}
deliverMessageToDestination(sendEvent)
}
// postDeliver - the message has been dispatched to be delivered asynchronously (unless the sync delivery flag is set, in which case it would be continue as synchronous delivery)
hooks.trigger("postDeliver", sendEvent, function(err) {
Expand Down

0 comments on commit f4d7b71

Please sign in to comment.