Author: fhanik
Date: Tue Mar  7 12:30:26 2006
New Revision: 384000

URL: http://svn.apache.org/viewcvs?rev=384000&view=rev
Log:
implemented timing on the pooled queue

Modified:
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java?rev=384000&r1=383999&r2=384000&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java
 Tue Mar  7 12:30:26 2006
@@ -157,16 +157,27 @@
         }
 
         public synchronized DataSender getSender(long timeout) {
-            if ( !isOpen ) throw new IllegalStateException("Queue is closed");
-            DataSender sender = null;
-            if ( notinuse.size() == 0 && inuse.size()<limit) {
-                sender = parent.getNewDataSender();
-            } else if (notinuse.size() > 0) {
+            long start = System.currentTimeMillis();
+            while ( true ) {
+                if (!isOpen)throw new IllegalStateException("Queue is closed");
+                DataSender sender = null;
+                if (notinuse.size() == 0 && inuse.size() < limit) {
+                    sender = parent.getNewDataSender();
+                } else if (notinuse.size() > 0) {
                     sender = (DataSender) notinuse.remove(0);
-            }            
-            if ( sender != null ) inuse.add(sender);
-//            System.out.println("get: in use:"+inuse.size()+" 
not:"+notinuse.size()+" thread:"+Thread.currentThread().getName());
-            return sender;
+                }
+                if (sender != null) {
+                    inuse.add(sender);
+                    return sender;
+                }//end if
+                long delta = System.currentTimeMillis() - start;
+                if ( delta > timeout && timeout>0) return null;
+                else {
+                    try {
+                        wait(timeout - delta);
+                    }catch (InterruptedException x){}
+                }//end if
+            }
         }
 
         public synchronized void returnSender(DataSender sender) {
@@ -177,7 +188,7 @@
             //to do
             inuse.remove(sender);
             notinuse.add(sender);
-//            System.out.println("return: in use:"+inuse.size()+" 
not:"+notinuse.size()+" thread:"+Thread.currentThread().getName());
+            notify();
         }
 
         public synchronized void close() {
@@ -194,6 +205,7 @@
             }//for
             notinuse.clear();
             inuse.clear();
+            notify();
             
 
 
@@ -201,6 +213,7 @@
 
         public synchronized void open() {
             isOpen = true;
+            notify();
         }
     }
     



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to