code: func (p *podWorkers) UpdatePod(options *UpdatePodOptions) {
  	pod := options.Pod
  	uid := pod.UID
  	var podUpdates chan UpdatePodOptions
  	var exists bool
  
  	p.podLock.Lock()
  	defer p.podLock.Unlock()
  	if podUpdates, exists = p.podUpdates[uid]; !exists {
  		// We need to have a buffer here, because checkForUpdates() method that
  		// puts an update into channel is called from the same goroutine where
  		// the channel is consumed. However, it is guaranteed that in such case
  		// the channel is empty, so buffer of size 1 is enough.
  		podUpdates = make(chan UpdatePodOptions, 1)
  		p.podUpdates[uid] = podUpdates
  
  		// Creating a new pod worker either means this is a new pod, or that the
  		// kubelet just restarted. In either case the kubelet is willing to believe
  		// the status of the pod for the first pod worker sync. See corresponding
  		// comment in syncPod.
  		go func() {
  			defer runtime.HandleCrash()
  			p.managePodLoop(podUpdates)
  		}()
  	}
  	if !p.isWorking[pod.UID] {
  		p.isWorking[pod.UID] = true
  		podUpdates <- *options
  	} else {
  		// if a request to kill a pod is pending, we do not let anything overwrite that request.
  		update, found := p.lastUndeliveredWorkUpdate[pod.UID]
  		if !found || update.UpdateType != kubetypes.SyncPodKill {
  			p.lastUndeliveredWorkUpdate[pod.UID] = *options
  		}
  	}
  }
docs: // Apply the new setting to the specified pod.
  // If the options provide an OnCompleteFunc, the function is invoked if the update is accepted.
  // Update requests are ignored if a kill pod request is pending.