func()

in lambda/supervisor/local_supervisor.go [237:278]


func (s *LocalSupervisor) Stop(ctx context.Context, req *model.StopRequest) (*model.StopResponse, error) {
	if req.Domain != "runtime" {
		log.Debug("Shutdown is no op if domain != runtime")
		return &model.StopResponse{}, nil
	}

	// shut down kills all the processes in the map
	s.processMapLock.Lock()
	defer s.processMapLock.Unlock()

	nprocs := len(s.processMap)

	successes := make(chan struct{})
	errors := make(chan error)
	for name, proc := range s.processMap {
		go func(n string, p process) {
			log.Debugf("Killing %s", n)
			err := kill(p, n, req.Deadline)
			if err != nil {
				errors <- err
			} else {
				successes <- struct{}{}
			}

		}(name, proc)
	}

	var err error
	for i := 0; i < nprocs; i++ {
		select {
		case <-successes:
		case e := <-errors:
			if err == nil {
				err = fmt.Errorf("shutdown failed: %s", e.Error())
			}
		}

	}

	s.processMap = make(map[string]process)
	return nil, err
}