code: func (mtask *managedTask) emitContainerEvent(task *apitask.Task, cont *apicontainer.Container, reason string) {
  	event, err := api.NewContainerStateChangeEvent(task, cont, reason)
  	if err != nil {
  		seelog.Debugf("Managed task [%s]: unable to create state change event for container [%s]: %v",
  			task.Arn, cont.Name, err)
  		return
  	}
  
  	seelog.Infof("Managed task [%s]: sending container change event [%s]: %s",
  		mtask.Arn, cont.Name, event.String())
  	mtask.stateChangeEvents <- event
  	seelog.Infof("Managed task [%s]: sent container change event [%s]: %s",
  		mtask.Arn, cont.Name, event.String())
  }
docs: // emitContainerEvent passes a given event up through the containerEvents channel if necessary.
  // It will omit events the backend would not process and will perform best-effort deduplication of events.