func (mtask *managedTask) waitForHostResources() {
	if mtask.StartSequenceNumber == 0 {
		// This is the first transition on this host. No need to wait
		return
	}
	if mtask.GetDesiredStatus().Terminal() {
		// Task's desired status is STOPPED. No need to wait in this case either
		return
	}

	seelog.Infof("Managed task [%s]: waiting for any previous stops to complete. Sequence number: %d",
		mtask.Arn, mtask.StartSequenceNumber)

	othersStoppedCtx, cancel := context.WithCancel(mtask.ctx)
	defer cancel()

	go func() {
		mtask.taskStopWG.Wait(mtask.StartSequenceNumber)
		cancel()
	}()

	for !mtask.waitEvent(othersStoppedCtx.Done()) {
		if mtask.GetDesiredStatus().Terminal() {
			// If we end up here, that means we received a start then stop for this
			// task before a task that was expected to stop before it could
			// actually stop
			break
		}
	}
	seelog.Infof("Managed task [%s]: wait over; ready to move towards status: %s",
		mtask.Arn, mtask.GetDesiredStatus().String())
}
func (mtask *managedTask) waitForHostResources() {
	if mtask.StartSequenceNumber == 0 {
		// This is the first transition on this host. No need to wait
		return
	}
	if mtask.GetDesiredStatus().Terminal() {
		// Task's desired status is STOPPED. No need to wait in this case either
		return
	}

	seelog.Infof("Managed task [%s]: waiting for any previous stops to complete. Sequence number: %d",
		mtask.Arn, mtask.StartSequenceNumber)

	othersStoppedCtx, cancel := context.WithCancel(mtask.ctx)
	defer cancel()

	go func() {
		mtask.taskStopWG.Wait(mtask.StartSequenceNumber)
		cancel()
	}()

	for !mtask.waitEvent(othersStoppedCtx.Done()) {
		if mtask.GetDesiredStatus().Terminal() {
			// If we end up here, that means we received a start then stop for this
			// task before a task that was expected to stop before it could
			// actually stop
			break
		}
	}
	seelog.Infof("Managed task [%s]: wait over; ready to move towards status: %s",
		mtask.Arn, mtask.GetDesiredStatus().String())
}
func ( mtask * managedTask ) waitForHostResources ( ) { if mtask . StartSequenceNumber == 0 { // This is the first transition on this host. No need to wait return } if mtask . GetDesiredStatus ( ) . Terminal ( ) { // Task's desired status is STOPPED. No need to wait in this case either return } seelog . Infof ( " " , mtask . Arn , mtask . StartSequenceNumber ) othersStoppedCtx , cancel := context . WithCancel ( mtask . ctx ) defer cancel ( ) go func ( ) { mtask . taskStopWG . Wait ( mtask . StartSequenceNumber ) cancel ( ) } ( ) for ! mtask . waitEvent ( othersStoppedCtx . Done ( ) ) { if mtask . GetDesiredStatus ( ) . Terminal ( ) { // If we end up here, that means we received a start then stop for this // task before a task that was expected to stop before it could // actually stop break } } seelog . Infof ( " " , mtask . Arn , mtask . GetDesiredStatus ( ) . String ( ) ) }
// waitForHostResources waits for host resources to become available to start
// the task. This involves waiting for previous stops to complete so the
// resources become free.
waitForHostResources waits for host resources to become available to start the task . This involves waiting for previous stops to complete so the resources become free .