billbarker    2004/01/15 22:48:21

  Modified:    jk/java/org/apache/jk/common ChannelSocket.java
                        HandlerRequest.java
               jk/java/org/apache/jk/core JkHandler.java
  Log:
  Initial fix for memory leak with registering Requests.
  
  This only currently fixes channel.socket.  All other channels are still broken.
  
  Revision  Changes    Path
  1.38      +8 -0      
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.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- ChannelSocket.java        30 Sep 2003 07:39:58 -0000      1.37
  +++ ChannelSocket.java        16 Jan 2004 06:48:20 -0000      1.38
  @@ -639,6 +639,14 @@
               catch( Exception e) {
                   log.error( "Error, closing connection", e);
               }
  +            try{
  +             MsgAjp endM = new MsgAjp();
  +                endM.reset();
  +                endM.appendByte((byte)HANDLE_THREAD_END);
  +                next.invoke(endM, ep);
  +            } catch( Exception ee) {
  +                log.error( "Error, releasing connection",ee);
  +            }
           }
       }
   
  
  
  
  1.31      +32 -13    
jakarta-tomcat-connectors/jk/java/org/apache/jk/common/HandlerRequest.java
  
  Index: HandlerRequest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/common/HandlerRequest.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- HandlerRequest.java       16 Jan 2004 03:57:59 -0000      1.30
  +++ HandlerRequest.java       16 Jan 2004 06:48:20 -0000      1.31
  @@ -65,6 +65,7 @@
   import java.io.CharConversionException;
   import java.net.InetAddress;
   import java.util.Properties;
  +import javax.management.ObjectName;
   
   import org.apache.commons.modeler.Registry;
   import org.apache.coyote.Request;
  @@ -247,10 +248,12 @@
                                             "JK_AJP13_SHUTDOWN",
                                             this, null); // 7
               
  -                        dispatch.registerMessageType( JK_AJP13_CPING_REQUEST,
  -                                                                                  
"JK_AJP13_CPING_REQUEST",
  -                                                                                  
this, null); // 10
  -            
  +            dispatch.registerMessageType( JK_AJP13_CPING_REQUEST,
  +                                          "JK_AJP13_CPING_REQUEST",
  +                                           this, null); // 10
  +            dispatch.registerMessageType( HANDLE_THREAD_END,
  +                                         "HANDLE_THREAD_END",
  +                                         this, null);
               // register outgoing messages handler
               dispatch.registerMessageType( JK_AJP13_SEND_BODY_CHUNK, // 3
                                             "JK_AJP13_SEND_BODY_CHUNK",
  @@ -260,6 +263,7 @@
           bodyNote=wEnv.getNoteId( WorkerEnv.ENDPOINT_NOTE, "jkInputStream" );
           tmpBufNote=wEnv.getNoteId( WorkerEnv.ENDPOINT_NOTE, "tmpBuf" );
           secretNote=wEnv.getNoteId( WorkerEnv.ENDPOINT_NOTE, "secret" );
  +        JMXRequestNote =wEnv.getNoteId( WorkerEnv.ENDPOINT_NOTE, "requestNote");
   
           if( next==null )
               next=wEnv.getHandler( "container" );
  @@ -356,6 +360,7 @@
       int bodyNote;
       int tmpBufNote;
       int secretNote;
  +    int JMXRequestNote;
   
       boolean decoded=true;
       boolean tomcatAuthentication=true;
  @@ -447,14 +452,25 @@
               
               return OK;
   
  -                // We got a PING REQUEST, quickly respond with a PONG
  -                case JK_AJP13_CPING_REQUEST:
  -                        msg.reset();
  -                        msg.appendByte(JK_AJP13_CPONG_REPLY);
  -                        ep.setType( JkHandler.HANDLE_SEND_PACKET );
  -                        ep.getSource().invoke( msg, ep );
  +            // We got a PING REQUEST, quickly respond with a PONG
  +        case JK_AJP13_CPING_REQUEST:
  +            msg.reset();
  +            msg.appendByte(JK_AJP13_CPONG_REPLY);
  +            ep.setType( JkHandler.HANDLE_SEND_PACKET );
  +            ep.getSource().invoke( msg, ep );
                           
  -                        return OK;
  +             return OK;
  +
  +        case HANDLE_THREAD_END:
  +            if(registerRequests) {
  +                Request req = (Request)ep.getRequest();
  +                if( req != null ) {
  +                    ObjectName roname = (ObjectName)ep.getNote(JMXRequestNote);
  +                    Registry.getRegistry().unregisterComponent(roname);
  +                    req.getRequestProcessor().setGlobalProcessor(null);
  +                }
  +            }
  +            return OK;
   
           default:
               System.err.println("Unknown message " + type );
  @@ -488,9 +504,12 @@
   
                       RequestInfo rp=req.getRequestProcessor();
                       rp.setGlobalProcessor(global);
  +                    ObjectName roname = new ObjectName(getDomain() + 
  +                                       "type=RequestProcessor,name=JkRequest" 
+count++);
  +                    ep.setNote(JMXRequestNote, roname);
  +                        
                       Registry.getRegistry().registerComponent( rp,
  -                            getDomain(), "RequestProcessor",
  -                            "type=RequestProcessor,name=JkRequest" + count++ );
  +                                                              roname, null);
                   } catch( Exception ex ) {
                       log.warn("Error registering request");
                   }
  
  
  
  1.14      +1 -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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- JkHandler.java    30 Sep 2003 07:39:59 -0000      1.13
  +++ JkHandler.java    16 Jan 2004 06:48:20 -0000      1.14
  @@ -91,6 +91,7 @@
       public static final int HANDLE_RECEIVE_PACKET   = 10;
       public static final int HANDLE_SEND_PACKET      = 11;
       public static final int HANDLE_FLUSH            = 12;
  +    public static final int HANDLE_THREAD_END       = 13;
       
       public void setWorkerEnv( WorkerEnv we ) {
           this.wEnv=we;
  
  
  

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

Reply via email to