code: func (gb *GraphBuilder) addUnblockedOwnersToDeleteQueue(removed []metav1.OwnerReference, changed []ownerRefPair) {
  	for _, ref := range removed {
  		if ref.BlockOwnerDeletion != nil && *ref.BlockOwnerDeletion {
  			node, found := gb.uidToNode.Read(ref.UID)
  			if !found {
  				klog.V(5).Infof("cannot find %s in uidToNode", ref.UID)
  				continue
  			}
  			gb.attemptToDelete.Add(node)
  		}
  	}
  	for _, c := range changed {
  		wasBlocked := c.oldRef.BlockOwnerDeletion != nil && *c.oldRef.BlockOwnerDeletion
  		isUnblocked := c.newRef.BlockOwnerDeletion == nil || (c.newRef.BlockOwnerDeletion != nil && !*c.newRef.BlockOwnerDeletion)
  		if wasBlocked && isUnblocked {
  			node, found := gb.uidToNode.Read(c.newRef.UID)
  			if !found {
  				klog.V(5).Infof("cannot find %s in uidToNode", c.newRef.UID)
  				continue
  			}
  			gb.attemptToDelete.Add(node)
  		}
  	}
  }
docs: // if an blocking ownerReference points to an object gets removed, or gets set to
  // "BlockOwnerDeletion=false", add the object to the attemptToDelete queue.