docs: @Override
      public int unpinElement(CacheElement cacheElement)
      {
          Element element = (Element) cacheElement;
  
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "unpin", element.key);
  
          int remaining = 0;
          Bucket bucket = element.ivBucket;
          synchronized (bucket)
          {
              if (element.pinned < 1)
              {
                  if (isTraceOn && tc.isEntryEnabled())
                      Tr.exit(tc, "unpin - throw IllegalOperationException");
                  throw new IllegalOperationException(element.key, element.pinned);
              }
  
              element.pinned--;
              remaining = element.pinned;
  
              // Touch the LRU flag; since an object cannot be evicted when
              // pinned, this is the only time when we bother to set the
              // flag
              element.accessedSweep = numSweeps;
          }
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "unpin:" + remaining);
          return remaining;
      }