if (binding == null)
if (binding != null && !binding.getQueue().isRecoverable())
   public void close() throws JMSException   {            try      {         synchronized (lock)         {             // On close we only disconnect the consumer from the queue we don't actually remove            // it. This is because it may still contain deliveries that may well be acknowledged            // after the consumer has closed. This is perfectly valid.            // FIXME - The deliveries should really be stored in the session endpoint, not here            // that is their natural place, that would mean we wouldn't have to mess around with            // keeping deliveries after this is closed.            if (trace) { log.trace(this + " grabbed the main lock in close()"); }            disconnect();                         JMSDispatcher.instance.unregisterTarget(new Integer(id));                        //If this is a consumer of a non durable subscription            //then we want to unbind the subscription and delete all it's data            if (destination.isTopic())            {               PostOffice topicPostOffice =                   sessionEndpoint.getConnectionEndpoint().getServerPeer().getTopicPostOfficeInstance();                              Binding binding = topicPostOffice.getBindingForQueueName(queueName);                              if (binding == null)               {                  throw new IllegalStateException("Cannot find queue with name " + queueName);               }                              if (!binding.getQueue().isRecoverable())               {                                   topicPostOffice.unbindQueue(queueName);               }            }                                    closed = true;         }      }      catch (Throwable t)      {         throw ExceptionUtil.handleJMSInvocation(t, this + " close");      }   }