Fix close logic for session
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/impl/AMQPSession.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/impl/AMQPSession.java
index 2f72470..fdfa72d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/impl/AMQPSession.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/impl/AMQPSession.java
@@ -71,9 +71,9 @@
         ch = connection.createChannel();
         ch.addShutdownListener(this);
         failureCount = 0;
-        LOGGER.info(MSG("Publish channel opened."));
+        LOGGER.info(MSG("Channel #{} opened."), ch.getChannelNumber());
       } catch (Exception ex) {
-        LOGGER.warn(MSG("Failed to open publish channel."));
+        LOGGER.warn(MSG("Failed to open channel."));
         failureCount++;
       }
       if (failureCount > properties.getSection(Monitor.class).failureCount) {
@@ -120,18 +120,24 @@
     LOGGER.info(MSG("Disconnecting..."));
     try {
       if (channel != null) {
+        LOGGER.info(MSG("Close Channel #{}..."), channel.getChannelNumber());
         channel.close();
       }
     } catch (Exception ex) {
       LOGGER.warn(MSG("Error when close channel.") , ex);
+    } finally {
+      channel = null;
     }
 
     try {
       if (connection != null) {
+        LOGGER.info(MSG("Close Connection..."));
         connection.close();
       }
     } catch (Exception ex) {
       LOGGER.warn(MSG("Error when close connection.") , ex);
+    } finally {
+      connection = null;
     }
   }
 
@@ -156,20 +162,21 @@
 
   @Override
   public void shutdownCompleted(ShutdownSignalException exception) {
-    Object obj = exception.getReference();
-
-    if (obj instanceof Channel) {
-      Channel ch = (Channel) obj;
-      if (ch.equals(channel)) {
-        LOGGER.info(MSG("Publish channel closed."));
-        channel = null;
-      }
-    } else if (obj instanceof Connection) {
-      Connection conn = (Connection) obj;
-      if (conn.equals(connection)) {
-        LOGGER.info(MSG("Connection disconnected."));
+    if (exception.isHardError()) {
+      if (exception.isInitiatedByApplication()) {
+        LOGGER.info(MSG("Connection closed."));
+      } else {
+        LOGGER.info(MSG("Connection suddenly closed."));
         connection = null;
       }
+    } else {
+      Channel ch = (Channel) exception.getReference();
+      if (exception.isInitiatedByApplication()) {
+        LOGGER.info(MSG("Channel #{} closed."), ch.getChannelNumber());
+      } else {
+        LOGGER.info(MSG("Channel #{} suddenly closed."), ch.getChannelNumber());
+        channel = null;
+      }
     }
   }
 }