log.info(this + " cancelled "  + r);
log.trace(this + " cancelled "  + r);
   public void cancel(Routable r) throws Throwable   {      Object[] touple = null;      Delivery d = null;      for (Iterator i = messages.iterator(); i.hasNext(); )      {         Object[] o = (Object[])i.next();         Message m = (Message)o[0];         if (m == r)         {            d = (Delivery)o[1];            touple = o;            i.remove();            break;         }      }      if (touple == null)      {         throw new IllegalStateException("The message " + r + " hasn't been received yet!");      }      if (d == null)      {         throw new IllegalStateException("The message " + r + " has already been acknowledged!");      }      d.cancel();      log.info(this + " cancelled "  + r);   }