You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/04/21 20:10:53 UTC

cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util/collections Queue.java

costin      01/04/21 11:10:52

  Modified:    src/share/org/apache/tomcat/util/collections Queue.java
  Log:
  Added a method to stop the Queue from waiting ( and blocking the log thread ).
  Part of 1418 fix.
  
  Revision  Changes    Path
  1.2       +16 -2     jakarta-tomcat/src/share/org/apache/tomcat/util/collections/Queue.java
  
  Index: Queue.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/collections/Queue.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Queue.java	2000/12/07 19:52:51	1.1
  +++ Queue.java	2001/04/21 18:10:52	1.2
  @@ -67,7 +67,9 @@
    */
   public class Queue {
       private Vector vector = new Vector();
  -
  +    private boolean stopWaiting=false;
  +    private boolean waiting=false;
  +    
       /** 
        * Put the object into the queue.
        * 
  @@ -78,17 +80,29 @@
   	vector.addElement(object);
   	notify();
       }
  +
  +    /** Break the pull(), allowing the calling thread to exit
  +     */
  +    public synchronized void stop() {
  +	stopWaiting=true;
  +	// just a hack to stop waiting 
  +	if( waiting ) notify();
  +    }
       
       /**
        * Pull the first object out of the queue. Wait if the queue is
        * empty.
        */
       public synchronized Object pull() {
  -	while (isEmpty())
  +	while (isEmpty()) {
   	    try {
  +		waiting=true;
   		wait();
   	    } catch (InterruptedException ex) {
   	    }
  +	    waiting=false;
  +	    if( stopWaiting ) return null;
  +	}
   	return get();
       }