I sent this to user list a few days ago, and got no response.  The dev
list is probably a better place for it.

I also see I forgot to attach my patch, which I will do now.

Ted Kirby

---------- Forwarded message ----------
From: Ted Kirby <[EMAIL PROTECTED]>
Date: May 16, 2007 11:02 AM
Subject: Problem with org.apache.coyote.Request ?
To: [EMAIL PROTECTED]


I see that setNote is used to cache objects in the Request object.  I
think these cached objects should be released in the recycle() method,
but I do not see code in there to do so.

I was tracing a problem I was having with a debugger on two different
JVMs.  I was looking at this traceback:
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:543)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:801)

I was stopping in org.apache.catalina.connector.CoyoteAdapter.service,
and my first time tthere, req.getNote(ADAPTER_NOTES) was not returning
null a Sun 1.5 JVM.  I also added code in the Request constructor to
insure notes was an array of nulls, and that fixed this "problem".

I have attached my fix.

I think not clearing notes in recycle() is a problem.  I was surprised
I seemed to need the code in the constructor.  It is possible that I
did not catch a use of the request object before service(), but I had
a stop in setNote().

It does not seem that setNote() is used very often, and I could not
really see what is was doing.

Ted Kirby
Index: java/org/apache/coyote/Request.java
===================================================================
--- java/org/apache/coyote/Request.java	(revision 538620)
+++ java/org/apache/coyote/Request.java	(working copy)
@@ -74,7 +74,12 @@
         parameters.setQuery(queryMB);
         parameters.setURLDecoder(urlDecoder);
         parameters.setHeaders(headers);
-
+        
+        for (int i = 0; i < notes.length; i++) {
+            if (notes[i] != null) {
+                notes[i] = null;
+            }
+        }
     }
 
 
@@ -511,6 +516,12 @@
         remoteUser.recycle();
         authType.recycle();
         attributes.clear();
+
+        for (int i = 0; i < notes.length; i++) {
+            if (notes[i] != null) {
+                notes[i] = null;
+            }
+        }
     }
 
     // -------------------- Info  --------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to