Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-gg-9702 f91e00581 -> a4c34f955


# GG-9613 free resources on remote nodes


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/d817a5cb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/d817a5cb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/d817a5cb

Branch: refs/heads/ignite-gg-9702
Commit: d817a5cbad054a78c9d7e9e2a0b22ee6d80f5b56
Parents: 3fdc824
Author: ptupitsyn <ptupit...@gridgain.com>
Authored: Wed Apr 15 17:21:48 2015 +0300
Committer: ptupitsyn <ptupit...@gridgain.com>
Committed: Wed Apr 15 17:21:48 2015 +0300

----------------------------------------------------------------------
 .../managers/communication/GridIoManager.java   | 26 +++++++++++++++--
 .../GridMessageCloseableFilter.java             | 30 ++++++++++++++++++++
 2 files changed, 54 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d817a5cb/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
index f0d595b..1ffad15 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
@@ -1383,7 +1383,7 @@ public class GridIoManager extends 
GridManagerAdapter<CommunicationSpi<Serializa
      * @return Whether or not the lsnr was removed.
      */
     @SuppressWarnings({"deprecation", 
"SynchronizationOnLocalVariableOrMethodParameter"})
-    public boolean removeMessageListener(Object topic, @Nullable final 
GridMessageListener lsnr) {
+    public boolean removeMessageListener(Object topic, @Nullable 
GridMessageListener lsnr) {
         assert topic != null;
 
         boolean rmv = true;
@@ -1394,7 +1394,8 @@ public class GridIoManager extends 
GridManagerAdapter<CommunicationSpi<Serializa
         if (lsnr == null) {
             closedTopics.add(topic);
 
-            rmv = lsnrMap.remove(topic) != null;
+            lsnr = lsnrMap.remove(topic);
+            rmv = lsnr != null;
 
             Map<UUID, GridCommunicationMessageSet> map = 
msgSetMap.remove(topic);
 
@@ -1466,10 +1467,31 @@ public class GridIoManager extends 
GridManagerAdapter<CommunicationSpi<Serializa
         if (rmv && log.isDebugEnabled())
             log.debug("Removed message listener [topic=" + topic + ", lsnr=" + 
lsnr + ']');
 
+        if (lsnr instanceof ArrayListener)
+        {
+            for (GridMessageListener childLsnr : ((ArrayListener)lsnr).arr) {
+                closeListener(childLsnr);
+            }
+        }
+        else
+            closeListener(lsnr);
+
         return rmv;
     }
 
     /**
+     * Closes a listener, if applicable.
+     * @param lsnr Listener.
+     */
+    private void closeListener(GridMessageListener lsnr) {
+        if (lsnr instanceof GridUserMessageListener) {
+            GridUserMessageListener userLsnr = (GridUserMessageListener)lsnr;
+            if (userLsnr.predLsnr instanceof GridMessageCloseableFilter)
+                ((GridMessageCloseableFilter)userLsnr.predLsnr).onClose();
+        }
+    }
+
+    /**
      * Gets sent messages count.
      *
      * @return Sent messages count.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d817a5cb/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridMessageCloseableFilter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridMessageCloseableFilter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridMessageCloseableFilter.java
new file mode 100644
index 0000000..4f84ebf
--- /dev/null
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridMessageCloseableFilter.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.managers.communication;
+
+import org.apache.ignite.lang.*;
+
+/**
+ * Special version of bi-predicate for messaging with close callback.
+ */
+public interface GridMessageCloseableFilter<K, V> extends IgniteBiPredicate<K, 
V> {
+    /**
+     * Callback invoked when predicate is no longer needed.
+     */
+    public void onClose();
+}

Reply via email to