@@ -214,7 +214,7 @@ func (e *Engine) processChanges() {
214214 if ! ok {
215215 return
216216 }
217- e .processChange ( change )
217+ e .processChangeList ([] * statemachine. Change { change } )
218218 case <- e .tickChanProvider ():
219219 e .processTick ()
220220 }
@@ -232,12 +232,22 @@ func (e *Engine) ResetMatch() {
232232 }
233233}
234234
235- func (e * Engine ) processChange (change * statemachine.Change ) {
235+ func (e * Engine ) processChangeList (changes []* statemachine.Change ) {
236+ var newChanges []* statemachine.Change
237+ for _ , change := range changes {
238+ newChanges = append (newChanges , e .processChange (change )... )
239+ }
240+ if len (newChanges ) > 0 {
241+ e .processChangeList (newChanges )
242+ }
243+ return
244+ }
245+
246+ func (e * Engine ) processChange (change * statemachine.Change ) (newChanges []* statemachine.Change ) {
236247 e .mutex .Lock ()
237248 defer e .mutex .Unlock ()
238249 log .Printf ("Engine: Process change '%v'" , change .StringJson ())
239250
240- var newChanges []* statemachine.Change
241251 entry := statemachine.StateChange {}
242252 entry .Change = change
243253 entry .StatePre = new (state.State )
@@ -279,11 +289,6 @@ func (e *Engine) processChange(change *statemachine.Change) {
279289
280290 e .postProcessChange (entry )
281291
282- log .Printf ("Enqueue %d new changes" , len (newChanges ))
283- for _ , newChange := range newChanges {
284- e .queue <- newChange
285- }
286-
287292 log .Println ("Add entry to state store" )
288293 if err := e .stateStore .Add (& entry ); err != nil {
289294 log .Println ("Could not add new state to store: " , err )
@@ -299,7 +304,9 @@ func (e *Engine) processChange(change *statemachine.Change) {
299304 }
300305 }
301306
307+ log .Printf ("Change produced %d new changes" , len (newChanges ))
302308 log .Printf ("Change '%v' processed" , change .StringJson ())
309+ return
303310}
304311
305312// initialStateFromStore gets the current state or returns a new default state
0 commit comments