@@ -82,16 +82,22 @@ func NewEnvManager(tm *task.Manager, incomingEventCh <-chan event.Event) *Manage
8282
8383 case * event.TasksReleasedEvent :
8484 // If we got a TasksReleasedEvent, it must be matched with a pending
85- // environment teardown if the task is critical .
85+ // environment teardown.
8686 if thisEnvCh , ok := instance .pendingTeardownsCh [typedEvent .GetEnvironmentId ()]; ok {
8787 thisEnvCh <- typedEvent
8888 close (thisEnvCh )
8989 delete (instance .pendingTeardownsCh , typedEvent .GetEnvironmentId ())
9090 } else {
91+ // If there is no pending environment teardown, it means that the released task stopped
92+ // unexpectedly. In that case, the environment should get torn-down only if the task
93+ // is critical.
9194 var releaseCriticalTask = false
9295 for _ , v := range typedEvent .GetTaskIds () {
93- if tm .GetTask (v ).GetTraits ().Critical == true || tm .GetTask (v ).GetParent ().GetTaskTraits ().Critical == true {
94- releaseCriticalTask = true
96+ if tm .GetTask (v ) != nil {
97+ if tm .GetTask (v ).GetTraits ().Critical == true {
98+ //|| tm.GetTask(v).GetParent().GetTaskTraits().Critical == true
99+ releaseCriticalTask = true
100+ }
95101 }
96102 }
97103 if releaseCriticalTask {
@@ -103,14 +109,19 @@ func NewEnvManager(tm *task.Manager, incomingEventCh <-chan event.Event) *Manage
103109
104110 case * event.TasksStateChangedEvent :
105111 // If we got a TasksStateChangedEvent, it must be matched with a pending
106- // environment transition if the task is critical .
112+ // environment transition.
107113 if thisEnvCh , ok := instance .pendingStateChangeCh [typedEvent .GetEnvironmentId ()]; ok {
108114 thisEnvCh <- typedEvent
109115 } else {
116+ // If there is no pending environment transition, it means that the changed task did so
117+ // unexpectedly. In that case, the environment should transition only if the task
118+ // is critical.
110119 var changeCriticalTask = false
111120 for _ , v := range typedEvent .GetTaskIds () {
112- if tm .GetTask (v ).GetTraits ().Critical == true || tm .GetTask (v ).GetParent ().GetTaskTraits ().Critical == true {
113- changeCriticalTask = true
121+ if tm .GetTask (v ) != nil {
122+ if tm .GetTask (v ).GetTraits ().Critical == true {
123+ changeCriticalTask = true
124+ }
114125 }
115126 }
116127 if changeCriticalTask {
0 commit comments