fix: prevent race condition in type-registered event handler

Cache activeFlowConfig reference at handler start to prevent issues if
activeFlowConfig is reassigned between indexOf and splice operations.

Also check that config is still active before calling start() to avoid
starting flows for an outdated configuration.

Fixes: Dennis-SEG/node-red#6
pull/5458/head
Dennis-SEG 2026-01-24 23:05:51 +01:00
parent 1019d52f78
commit 5d4a37f1e6
1 changed files with 6 additions and 4 deletions

View File

@ -55,12 +55,14 @@ function init(runtime) {
state = 'stop';
if (!typeEventRegistered) {
events.on('type-registered',function(type) {
if (activeFlowConfig && activeFlowConfig.missingTypes.length > 0) {
var i = activeFlowConfig.missingTypes.indexOf(type);
var config = activeFlowConfig;
if (config && config.missingTypes.length > 0) {
var i = config.missingTypes.indexOf(type);
if (i != -1) {
log.info(log._("nodes.flows.registered-missing", {type:type}));
activeFlowConfig.missingTypes.splice(i,1);
if (activeFlowConfig.missingTypes.length === 0 && started) {
config.missingTypes.splice(i,1);
// Only start if config is still the active one
if (config === activeFlowConfig && config.missingTypes.length === 0 && started) {
events.emit("runtime-event",{id:"runtime-state",retain: true});
start();
}