billbarker    2004/01/26 22:43:18

  Modified:    jk/java/org/apache/jk/common ChannelSocket.java
                        JniHandler.java
               jk/java/org/apache/jk/core JkHandler.java
               jk/java/org/apache/jk/server JkCoyoteHandler.java
                        JkMain.java
  Log:
  Adding support for the new pause/resume protocol.
  
  Revision  Changes    Path
  1.39      +55 -15    
jakarta-tomcat-connectors/jk/java/org/apache/jk/common/ChannelSocket.java
  
  Index: ChannelSocket.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/common/ChannelSocket.java,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- ChannelSocket.java        16 Jan 2004 06:48:20 -0000      1.38
  +++ ChannelSocket.java        27 Jan 2004 06:43:18 -0000      1.39
  @@ -277,13 +277,38 @@
       
       /* ==================== ==================== */
       ServerSocket sSocket;
  -    int socketNote=1;
  -    int isNote=2;
  -    int osNote=3;
  -    int notifNote=4;
  +    final int socketNote=1;
  +    final int isNote=2;
  +    final int osNote=3;
  +    final int notifNote=4;
  +    boolean paused = false;
  +
  +    public void pause() throws Exception {
  +        synchronized(this) {
  +            paused = true;
  +            unLockSocket();
  +        }
  +    }
  +
  +    public void resume() throws Exception {
  +        synchronized(this) {
  +            paused = false;
  +            notify();
  +        }
  +    }
  +
   
       public void accept( MsgContext ep ) throws IOException {
           if( sSocket==null ) return;
  +        synchronized(this) {
  +            while(paused) {
  +                try{ 
  +                    wait();
  +                } catch(InterruptedException ie) {
  +                    //Ignore, since can't happen
  +                }
  +            }
  +        }
           Socket s=sSocket.accept();
           ep.setNote( socketNote, s );
           if(log.isDebugEnabled() )
  @@ -412,6 +437,20 @@
           s.close();
       }
   
  +    private void unLockSocket() throws IOException {
  +     // Need to create a connection to unlock the accept();
  +     Socket s;
  +     if (inet == null) {
  +         s=new Socket("127.0.0.1", port );
  +     }else{
  +         s=new Socket(inet, port );
  +         // setting soLinger to a small value will help shutdown the
  +         // connection quicker
  +         s.setSoLinger(true, 0);
  +     }
  +     s.close();
  +    }
  +
       public void destroy() throws IOException {
           running = false;
           try {
  @@ -420,17 +459,10 @@
                   return;
               tp.shutdown();
   
  -            // Need to create a connection to unlock the accept();
  -            Socket s;
  -            if (inet == null) {
  -                s=new Socket("127.0.0.1", port );
  -            }else{
  -                s=new Socket(inet, port );
  -                // setting soLinger to a small value will help shutdown the
  -                // connection quicker
  -                s.setSoLinger(true, 0);
  -            }
  -            s.close();
  +         if(!paused) {
  +             unLockSocket();
  +         }
  +
               sSocket.close(); // XXX?
               
               if( tpOName != null )  {
  @@ -575,6 +607,11 @@
               log.debug("Accepting ajp connections on " + port);
           while( running ) {
               try {
  +                synchronized(this) {
  +                    while(paused) {
  +                        wait();
  +                    }
  +                }
                   MsgContext ep=new MsgContext();
                   ep.setSource(this);
                   ep.setWorkerEnv( wEnv );
  @@ -600,6 +637,9 @@
           try {
               MsgAjp recv=new MsgAjp();
               while( running ) {
  +                if(paused) { // Drop the connection on pause
  +                    break;
  +                }
                   int status= this.receive( recv, ep );
                   if( status <= 0 ) {
                       if( status==-3)
  
  
  
  1.14      +25 -0     
jakarta-tomcat-connectors/jk/java/org/apache/jk/common/JniHandler.java
  
  Index: JniHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/common/JniHandler.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- JniHandler.java   18 Sep 2003 16:21:00 -0000      1.13
  +++ JniHandler.java   27 Jan 2004 06:43:18 -0000      1.14
  @@ -103,6 +103,7 @@
       public static final int MSG_NOTE=0;
       public static final int C2B_NOTE=1;
       public static final int MB_NOTE=2;
  +    private boolean paused = false;
   
   
       public JniHandler() {
  @@ -177,11 +178,35 @@
           msg.appendByteChunk( bc );
       }
   
  +    public void pause() throws Exception {
  +        synchronized(this) {
  +            paused = true;
  +        }
  +    }
  +
  +    public void resume() throws Exception {
  +        synchronized(this) {
  +            paused = false;
  +            notifyAll();
  +        }
  +    }
  +
  +
       /** Create a msg context to be used with the shm channel
        */
       public MsgContext createMsgContext() {
           if( nativeJkHandlerP==0 || apr==null  )
               return null;
  +
  +        synchronized(this) {
  +            try{ 
  +                while(paused) {
  +                    wait();
  +                }
  +            }catch(InterruptedException ie) {
  +                // Ignore, since it can't happen
  +            }
  +        }
   
           try {
               MsgContext msgCtx=new MsgContext();
  
  
  
  1.15      +6 -0      
jakarta-tomcat-connectors/jk/java/org/apache/jk/core/JkHandler.java
  
  Index: JkHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/core/JkHandler.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- JkHandler.java    16 Jan 2004 06:48:20 -0000      1.14
  +++ JkHandler.java    27 Jan 2004 06:43:18 -0000      1.15
  @@ -229,4 +229,10 @@
       public void postDeregister() {
       }
   
  +    public void pause() throws Exception {
  +    }
  +
  +    public void resume() throws Exception {
  +    }
  +
   }
  
  
  
  1.50      +2 -2      
jakarta-tomcat-connectors/jk/java/org/apache/jk/server/JkCoyoteHandler.java
  
  Index: JkCoyoteHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/server/JkCoyoteHandler.java,v
  retrieving revision 1.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- JkCoyoteHandler.java      26 Jan 2004 18:16:44 -0000      1.49
  +++ JkCoyoteHandler.java      27 Jan 2004 06:43:18 -0000      1.50
  @@ -236,11 +236,11 @@
       }
   
       public void pause() throws Exception {
  -        // FIXME
  +        getJkMain().pause();
       }
   
       public void resume() throws Exception {
  -        // FIXME
  +        getJkMain().resume();
       }
   
       public void destroy() {
  
  
  
  1.43      +17 -0     
jakarta-tomcat-connectors/jk/java/org/apache/jk/server/JkMain.java
  
  Index: JkMain.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/server/JkMain.java,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- JkMain.java       18 Sep 2003 16:21:02 -0000      1.42
  +++ JkMain.java       27 Jan 2004 06:43:18 -0000      1.43
  @@ -692,4 +692,21 @@
       public void postDeregister() {
       }
   
  +    public void pause() throws Exception {
  +        for( int i=0; i<wEnv.getHandlerCount(); i++ ) {
  +            if( wEnv.getHandler(i) != null ) {
  +                wEnv.getHandler(i).pause();
  +            }
  +        }
  +    }
  +
  +    public void resume() throws Exception {
  +        for( int i=0; i<wEnv.getHandlerCount(); i++ ) {
  +            if( wEnv.getHandler(i) != null ) {
  +                wEnv.getHandler(i).resume();
  +            }
  +        }
  +    }
  +
  +
   }
  
  
  

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

Reply via email to