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]