code: public boolean remove(Node<E> e) {
  
          mPutLock.lock();
          mPollLock.lock();
          try {
              if (e == null)
                  return false;
      
              if (e.mRemoved)
                  return false;
      
              if (mSize.get() == 0)
                  return false;
  
              if (e == mTail) {
                  removeTail();
                  return true;
              }
              if (e == mHead.mNext) {
                  removeHead();
                  return true;
              }
              if (mSize.get() < 3)
                  return false;
  
              if (e.mPrev == null || e.mNext == null)
                  return false;
  
              e.mPrev.mNext = e.mNext;
              e.mNext.mPrev = e.mPrev;
              e.mRemoved = true;
              mSize.decrementAndGet();
              mNodePool.returnNode(e);
              return true;
          }
          finally {
              mPollLock.unlock();
              mPutLock.unlock();
          }
      }
docs: Removes a given Node handle.   This is a blocking operation that runs in constant time.