mirror of https://github.com/node-red/node-red.git
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#6pull/5458/head
parent
1019d52f78
commit
5d4a37f1e6
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue