You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/07/31 08:43:30 UTC

svn commit: r561242 - in /mina: branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/ branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/ branches/1.0/core/src/main/java/org/apache/mina/util/ branches/1.1/core/...

Author: trustin
Date: Mon Jul 30 23:43:29 2007
New Revision: 561242

URL: http://svn.apache.org/viewvc?view=rev&rev=561242
Log:
Fixed issue: DIRMINA-407 (IoSession.getScheduledWriteMessages() returns wrong value.) * Need to remove duplicates in trunk (other branches are OK IMO because we are in maintenance mode.)

Modified:
    mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
    mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
    mina/branches/1.0/core/src/main/java/org/apache/mina/util/Queue.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java
    mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java Mon Jul 30 23:43:29 2007
@@ -160,7 +160,7 @@
 
     public int getScheduledWriteRequests() {
         synchronized (writeRequestQueue) {
-            return writeRequestQueue.size();
+            return writeRequestQueue.messageSize();
         }
     }
 

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Mon Jul 30 23:43:29 2007
@@ -169,7 +169,7 @@
 
     public int getScheduledWriteRequests() {
         synchronized (writeRequestQueue) {
-            return writeRequestQueue.size();
+            return writeRequestQueue.messageSize();
         }
     }
 

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/util/Queue.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/util/Queue.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/util/Queue.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/util/Queue.java Mon Jul 30 23:43:29 2007
@@ -26,6 +26,7 @@
 import java.util.NoSuchElementException;
 
 import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IoFilter.WriteRequest;
 
 /**
  * A unbounded circular queue.
@@ -151,12 +152,10 @@
     public int size() {
         return size;
     }
-
+    
     /**
      * Returns the sum of the '<tt>remaining</tt>' of all {@link ByteBuffer}s
      * in this queue.
-     * 
-     * @throws ClassCastException if an element is not a {@link ByteBuffer}
      */
     public int byteSize() {
         if (isEmpty()) {
@@ -167,18 +166,101 @@
 
         if (first < last) {
             for (int i = first; i < last; i++) {
-                byteSize += ((ByteBuffer) items[i]).remaining();
+                if (items[i] instanceof ByteBuffer) {
+                    byteSize += ((ByteBuffer) items[i]).remaining();
+                } else if (items[i] instanceof WriteRequest) {
+                    Object message = ((WriteRequest) items[i]).getMessage();
+                    if (message instanceof ByteBuffer) {
+                        byteSize += ((ByteBuffer) message).remaining();
+                    }
+                }
             }
         } else {
             for (int i = first; i < items.length; i++) {
-                byteSize += ((ByteBuffer) items[i]).remaining();
+                if (items[i] instanceof ByteBuffer) {
+                    byteSize += ((ByteBuffer) items[i]).remaining();
+                } else if (items[i] instanceof WriteRequest) {
+                    Object message = ((WriteRequest) items[i]).getMessage();
+                    if (message instanceof ByteBuffer) {
+                        byteSize += ((ByteBuffer) message).remaining();
+                    }
+                }
             }
             for (int i = last - 1; i >= 0; i--) {
-                byteSize += ((ByteBuffer) items[i]).remaining();
+                if (items[i] instanceof ByteBuffer) {
+                    byteSize += ((ByteBuffer) items[i]).remaining();
+                } else if (items[i] instanceof WriteRequest) {
+                    Object message = ((WriteRequest) items[i]).getMessage();
+                    if (message instanceof ByteBuffer) {
+                        byteSize += ((ByteBuffer) message).remaining();
+                    }
+                }
             }
         }
 
         return byteSize;
+    }
+    
+    public int messageSize() {
+        if (isEmpty()) {
+            return 0;
+        }
+
+        int messageSize = 0;
+
+        if (first < last) {
+            for (int i = first; i < last; i++) {
+                if (items[i] instanceof WriteRequest) {
+                    Object message = ((WriteRequest) items[i]).getMessage();
+                    if (message instanceof ByteBuffer) {
+                        if (((ByteBuffer) message).hasRemaining()) {
+                            messageSize ++;
+                        }
+                    } else {
+                        messageSize ++;
+                    }
+                } else if (items[i] instanceof ByteBuffer) {
+                    if (((ByteBuffer) items[i]).hasRemaining()) {
+                        messageSize ++;
+                    }
+                }
+            }
+        } else {
+            for (int i = first; i < items.length; i++) {
+                if (items[i] instanceof WriteRequest) {
+                    Object message = ((WriteRequest) items[i]).getMessage();
+                    if (message instanceof ByteBuffer) {
+                        if (((ByteBuffer) message).hasRemaining()) {
+                            messageSize ++;
+                        }
+                    } else {
+                        messageSize ++;
+                    }
+                } else if (items[i] instanceof ByteBuffer) {
+                    if (((ByteBuffer) items[i]).hasRemaining()) {
+                        messageSize ++;
+                    }
+                }
+            }
+            for (int i = last - 1; i >= 0; i--) {
+                if (items[i] instanceof WriteRequest) {
+                    Object message = ((WriteRequest) items[i]).getMessage();
+                    if (message instanceof ByteBuffer) {
+                        if (((ByteBuffer) message).hasRemaining()) {
+                            messageSize ++;
+                        }
+                    } else {
+                        messageSize ++;
+                    }
+                } else if (items[i] instanceof ByteBuffer) {
+                    if (((ByteBuffer) items[i]).hasRemaining()) {
+                        messageSize ++;
+                    }
+                }
+            }
+        }
+
+        return messageSize;
     }
 
     public String toString() {

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java Mon Jul 30 23:43:29 2007
@@ -162,7 +162,19 @@
     }
 
     public int getScheduledWriteRequests() {
-        return writeRequestQueue.size();
+        int size = 0;
+        for (WriteRequest request : writeRequestQueue) {
+            Object message = request.getMessage();
+            if (message instanceof ByteBuffer) {
+                if (((ByteBuffer) message).hasRemaining()) {
+                    size ++;
+                }
+            } else {
+                size ++;
+            }
+        }
+
+        return size;
     }
 
     /**

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Mon Jul 30 23:43:29 2007
@@ -173,7 +173,21 @@
     }
 
     public int getScheduledWriteRequests() {
-        return writeRequestQueue.size();
+        int size = 0;
+        synchronized (writeRequestQueue) {
+            for (WriteRequest request : writeRequestQueue) {
+                Object message = request.getMessage();
+                if (message instanceof ByteBuffer) {
+                    if (((ByteBuffer) message).hasRemaining()) {
+                        size ++;
+                    }
+                } else {
+                    size ++;
+                }
+            }
+        }
+
+        return size;
     }
 
     public int getScheduledWriteBytes() {

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java Mon Jul 30 23:43:29 2007
@@ -27,7 +27,7 @@
  * @author The Apache Directory Project (mina-dev@directory.apache.org)
  * @version $Rev$, $Date$
  */
-public class VmPipeAddress extends SocketAddress implements Comparable {
+public class VmPipeAddress extends SocketAddress implements Comparable<VmPipeAddress> {
     private static final long serialVersionUID = 3257844376976830515L;
 
     private final int port;
@@ -63,8 +63,8 @@
         return false;
     }
 
-    public int compareTo(Object o) {
-        return this.port - ((VmPipeAddress) o).port;
+    public int compareTo(VmPipeAddress o) {
+        return this.port - o.port;
     }
 
     public String toString() {

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java Mon Jul 30 23:43:29 2007
@@ -135,9 +135,21 @@
     }
 
     public int getScheduledWriteMessages() {
+        int size = 0;
         synchronized (writeRequestQueue) {
-            return writeRequestQueue.size();
+            for (WriteRequest request : writeRequestQueue) {
+                Object message = request.getMessage();
+                if (message instanceof ByteBuffer) {
+                    if (((ByteBuffer) message).hasRemaining()) {
+                        size ++;
+                    }
+                } else {
+                    size ++;
+                }
+            }
         }
+
+        return size;
     }
 
     public int getScheduledWriteBytes() {

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Mon Jul 30 23:43:29 2007
@@ -187,9 +187,21 @@
     }
 
     public int getScheduledWriteMessages() {
+        int size = 0;
         synchronized (writeRequestQueue) {
-            return writeRequestQueue.size();
+            for (WriteRequest request : writeRequestQueue) {
+                Object message = request.getMessage();
+                if (message instanceof ByteBuffer) {
+                    if (((ByteBuffer) message).hasRemaining()) {
+                        size ++;
+                    }
+                } else {
+                    size ++;
+                }
+            }
         }
+
+        return size;
     }
 
     public int getScheduledWriteBytes() {

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAddress.java Mon Jul 30 23:43:29 2007
@@ -27,7 +27,7 @@
  * @author The Apache MINA Project (dev@mina.apache.org)
  * @version $Rev$, $Date$
  */
-public class VmPipeAddress extends SocketAddress implements Comparable {
+public class VmPipeAddress extends SocketAddress implements Comparable<VmPipeAddress> {
     private static final long serialVersionUID = 3257844376976830515L;
 
     private final int port;
@@ -67,8 +67,8 @@
         return false;
     }
 
-    public int compareTo(Object o) {
-        return this.port - ((VmPipeAddress) o).port;
+    public int compareTo(VmPipeAddress o) {
+        return this.port - o.port;
     }
 
     @Override

Modified: mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java?view=diff&rev=561242&r1=561241&r2=561242
==============================================================================
--- mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java (original)
+++ mina/trunk/transport-serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java Mon Jul 30 23:43:29 2007
@@ -120,9 +120,21 @@
     }
 
     public int getScheduledWriteMessages() {
+        int size = 0;
         synchronized (writeRequestQueue) {
-            return writeRequestQueue.size();
+            for (WriteRequest request : writeRequestQueue) {
+                Object message = request.getMessage();
+                if (message instanceof ByteBuffer) {
+                    if (((ByteBuffer) message).hasRemaining()) {
+                        size ++;
+                    }
+                } else {
+                    size ++;
+                }
+            }
         }
+
+        return size;
     }
 
     public int getScheduledWriteBytes() {