code: func newBlockingOwnerDeletionRefs(newObj, oldObj runtime.Object) []metav1.OwnerReference {
  	newMeta, err := meta.Accessor(newObj)
  	if err != nil {
  		// if we don't have objectmeta, we don't have the object reference
  		return nil
  	}
  	newRefs := newMeta.GetOwnerReferences()
  	blockingNewRefs := blockingOwnerRefs(newRefs)
  	if len(blockingNewRefs) == 0 {
  		return nil
  	}
  
  	if oldObj == nil {
  		return blockingNewRefs
  	}
  	oldMeta, err := meta.Accessor(oldObj)
  	if err != nil {
  		// if we don't have objectmeta, treat it as if all the ownerReference are newly created
  		return blockingNewRefs
  	}
  
  	var ret []metav1.OwnerReference
  	indexedOldRefs := indexByUID(oldMeta.GetOwnerReferences())
  	for _, ref := range blockingNewRefs {
  		oldRef, ok := indexedOldRefs[ref.UID]
  		if !ok {
  			// if ref is newly added, and it's blocking, then returns it.
  			ret = append(ret, ref)
  			continue
  		}
  		wasNotBlocking := oldRef.BlockOwnerDeletion == nil || *oldRef.BlockOwnerDeletion == false
  		if wasNotBlocking {
  			ret = append(ret, ref)
  		}
  	}
  	return ret
  }
docs: // Returns new blocking ownerReferences, and references whose blockOwnerDeletion
  // field is changed from nil or false to true.