DO NOT REPLY [Bug 46875] New: CometConnectionManagerValve: concurrent access on session object when calling HttpSession.invalidate()
https://issues.apache.org/bugzilla/show_bug.cgi?id=46875 Summary: CometConnectionManagerValve: concurrent access on session object when calling HttpSession.invalidate() Product: Tomcat 6 Version: 6.0.18 Platform: PC OS/Version: All Status: NEW Severity: major Priority: P2 Component: Catalina AssignedTo: dev@tomcat.apache.org ReportedBy: holger.sch...@tsi-mms.de When calling invalidate() on an valid HttpSession object CometConnectionManagerValve methods sessionDestroy(HttpSessionEvent se) and event(Request request, Response response, CometEvent event) are called concurrently. So either a CometEvent with EventType.END and EventSubType.SESSION_END is never signaled via sessionDestroyed(...) or the HttpSession object has become invalid and the attribute holding comet requests can not be set or removed via event(...). I have configured CometConnectionManagerValve as a Valve element in context.xml and also as a Listener element in my applications web.xml. see this stacktrace 'sessionDestroy() was a bit faster': An exception or error occurred in the container during the request processing java.lang.IllegalStateException: removeAttribute: Session already invalidated at org.apache.catalina.session.StandardSession.removeAttribute(StandardSession.java:1206) at org.apache.catalina.session.StandardSession.removeAttribute(StandardSession.java:1181) at org.apache.catalina.session.StandardSessionFacade.removeAttribute(StandardSessionFacade.java:140) at org.apache.catalina.valves.CometConnectionManagerValve.event(CometConnectionManagerValve.java:335) at org.apache.catalina.core.StandardHostValve.event(StandardHostValve.java:179) at org.apache.catalina.valves.ValveBase.event(ValveBase.java:200) at org.apache.catalina.core.StandardEngineValve.event(StandardEngineValve.java:128) at org.apache.catalina.connector.CoyoteAdapter.event(CoyoteAdapter.java:198) at org.apache.coyote.http11.Http11NioProcessor.event(Http11NioProcessor.java:750) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.event(Http11NioProtocol.java:653) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2081) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:637) -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Tagging JK 1.2.28
I plan to tag Tomcat Connectors 1.2.28 tomorrow after 1pm GMT and call for the release vote. If there is a need to wait for some last minute changes or more testing please let me know. Thanks! Rainer - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: Tagging JK 1.2.28
For now, I still can't build it on i5/OS ;-( 2009/3/19 Rainer Jung : > I plan to tag Tomcat Connectors 1.2.28 tomorrow after 1pm GMT and call for > the release vote. If there is a need to wait for some last minute changes or > more testing please let me know. > > Thanks! > > Rainer > > > > > - > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org > > - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: Tagging JK 1.2.28
2009/3/19 Henri Gomez : >> Well if you don't came up with the patches, >> (or someone else) we cannot postpone the >> release because no one else has access to >> that OS. At least some build log might >> help, but it's up to maintainer to test >> and eventually propose the fixes. > > The patch is easy, just add the extern keyword in common/jk_map.h :) > > /* Local environment table */ > extern jk_map_t *jk_environment_map; > > > Now I'll try if it works > I tried with i5/OS V5R4 and it core in APR libraries. Module d'origine . . . . . : QLEDEH Procédure d'origine . . . . : Q LE leDefaultEh Instruction . . . . . . . . : 205 Module de destination . . . : ZHBMAIN Procédure de destination . : BigSwitch__FiPPc Instruction . . . . . . . . : 234 Message . . . . : Application error. MCH3601 unmonitored by QZSRAPR at statement 08, instruction X''. Cause . . . . . : The application ended abnormally because an exception occurred and was not handled. The name of the program to which the unhandled exception is sent is QZSRAPR APR_POOLS allocator_free. The program was stopped at the high-level language statement number(s) 08 at the time the message was sent. If more than one statement number is shown, the program is an optimized ILE program. Optimization does not allow a single ;-( - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: Tagging JK 1.2.28
>From the error log it seems jk_environment_map is exported in both mod_jk.c and various .c from common. I'll check it 2009/3/19 Henri Gomez : > For now, I still can't build it on i5/OS ;-( > > 2009/3/19 Rainer Jung : >> I plan to tag Tomcat Connectors 1.2.28 tomorrow after 1pm GMT and call for >> the release vote. If there is a need to wait for some last minute changes or >> more testing please let me know. >> >> Thanks! >> >> Rainer >> >> >> >> >> - >> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org >> For additional commands, e-mail: dev-h...@tomcat.apache.org >> >> > - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
DO NOT REPLY [Bug 46876] New: Tomcat terminates after 2 hours of work
https://issues.apache.org/bugzilla/show_bug.cgi?id=46876 Summary: Tomcat terminates after 2 hours of work Product: Tomcat 5 Version: 5.5.20 Platform: PC OS/Version: Windows Vista Status: NEW Severity: critical Priority: P2 Component: Catalina AssignedTo: dev@tomcat.apache.org ReportedBy: bolbot_l...@yahoo.com After 2 hours of work the Tomcat terminates. Using the log4j i've receive the following log file. -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
DO NOT REPLY [Bug 46876] Tomcat terminates after 2 hours of work
https://issues.apache.org/bugzilla/show_bug.cgi?id=46876 --- Comment #1 from Yevgen_78 2009-03-19 05:00:58 PST --- Created an attachment (id=23393) --> (https://issues.apache.org/bugzilla/attachment.cgi?id=23393) Zipped log part of the log4j -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: Tagging JK 1.2.28
> Well if you don't came up with the patches, > (or someone else) we cannot postpone the > release because no one else has access to > that OS. At least some build log might > help, but it's up to maintainer to test > and eventually propose the fixes. The patch is easy, just add the extern keyword in common/jk_map.h :) /* Local environment table */ extern jk_map_t *jk_environment_map; Now I'll try if it works - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: Tagging JK 1.2.28
Henri Gomez wrote: For now, I still can't build it on i5/OS ;-( Well if you don't came up with the patches, (or someone else) we cannot postpone the release because no one else has access to that OS. At least some build log might help, but it's up to maintainer to test and eventually propose the fixes. Regards -- ^(TM) - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
DO NOT REPLY [Bug 46876] Tomcat terminates after 2 hours of work
https://issues.apache.org/bugzilla/show_bug.cgi?id=46876 Mark Thomas changed: What|Removed |Added Status|NEW |RESOLVED Resolution||INVALID --- Comment #2 from Mark Thomas 2009-03-19 05:58:25 PST --- Bugzilla is not a support forum. Please use the users list. -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
Re: Tagging JK 1.2.28
Hi Henri, can you please provide some basic information that helps us find the reason: 1) What was the original compiler error that you got, before adding "extern". 2) What is the httpd and jk configuration that was used when the core happened. 3) What did you have to do to get the core, e.g. which URL did you call, or does it happen immediately during startup etc. 4) Can you provide the contents of the httpd error log and a JK log file with log level trace containing startup and the core situation. 5) Is it possible on iSeries to get a stack of the relevant thread from the core, i.e. not only the top level method "allocator_free". 6) What is strange: JK doesn't use APR. Are you sure, that core is actually related to JK, or did you do some more upgrades like e.g. upgrading APR or httpd? Regards, Rainer On 19.03.2009 12:35, Henri Gomez wrote: 2009/3/19 Henri Gomez: Well if you don't came up with the patches, (or someone else) we cannot postpone the release because no one else has access to that OS. At least some build log might help, but it's up to maintainer to test and eventually propose the fixes. The patch is easy, just add the extern keyword in common/jk_map.h :) /* Local environment table */ extern jk_map_t *jk_environment_map; Now I'll try if it works I tried with i5/OS V5R4 and it core in APR libraries. Module d'origine . . . . . : QLEDEH Procédure d'origine . . . . : Q LE leDefaultEh Instruction . . . . . . . . : 205 Module de destination . . . : ZHBMAIN Procédure de destination . : BigSwitch__FiPPc Instruction . . . . . . . . : 234 Message . . . . : Application error. MCH3601 unmonitored by QZSRAPR at statement 08, instruction X''. Cause . . . . . : The application ended abnormally because an exception occurred and was not handled. The name of the program to which the unhandled exception is sent is QZSRAPR APR_POOLS allocator_free. The program was stopped at the high-level language statement number(s) 08 at the time the message was sent. If more than one statement number is shown, the program is an optimized ILE program. Optimization does not allow a single ;-( - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r756058 - in /tomcat/connectors/trunk/jk/native: apache-1.3/mod_jk.c apache-2.0/mod_jk.c common/jk_map.c common/jk_map.h common/jk_uri_worker_map.c iis/jk_isapi_plugin.c netscape/jk_nsapi_
Author: rjung Date: Thu Mar 19 15:52:06 2009 New Revision: 756058 URL: http://svn.apache.org/viewvc?rev=756058&view=rev Log: Inject environment map from web server plugin as a function parameter instead of keeping it global. This seems a bit cleaner and gives us more flexibility to use the feature for other maps as well in the future. The only public functions changed are: jk_map_read_property() and jk_map_read_properties(). Remove jk_map_replace_properties() from the public jk_map API, because we only use it internally. Change last arg in jk_map_replace_properties() to being not const (it never really was, and no caller relies on this). Modified: tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c tomcat/connectors/trunk/jk/native/common/jk_map.c tomcat/connectors/trunk/jk/native/common/jk_map.h tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c tomcat/connectors/trunk/jk/native/netscape/jk_nsapi_plugin.c tomcat/connectors/trunk/jk/native/nt_service/jk_nt_service.c Modified: tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c?rev=756058&r1=756057&r2=756058&view=diff == --- tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c (original) +++ tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c Thu Mar 19 15:52:06 2009 @@ -2042,7 +2042,7 @@ if (!jk_worker_properties) jk_map_alloc(&jk_worker_properties); -if (jk_map_read_property(jk_worker_properties, line, +if (jk_map_read_property(jk_worker_properties, NULL, line, JK_MAP_HANDLE_DUPLICATES, conf->log) == JK_FALSE) return ap_pstrcat(cmd->temp_pool, "Invalid JkWorkerProperty ", line, NULL); @@ -2844,7 +2844,7 @@ } if ((jk_worker_file != NULL) && -!jk_map_read_properties(jk_worker_properties, jk_worker_file, NULL, +!jk_map_read_properties(jk_worker_properties, NULL, jk_worker_file, NULL, JK_MAP_HANDLE_DUPLICATES, conf->log)) { jk_error_exit(APLOG_MARK, APLOG_EMERG | APLOG_NOERRNO, s, p, "Error in reading worker properties from '%s'", Modified: tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c?rev=756058&r1=756057&r2=756058&view=diff == --- tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c (original) +++ tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c Thu Mar 19 15:52:06 2009 @@ -2143,7 +2143,7 @@ if (!jk_worker_properties) jk_map_alloc(&jk_worker_properties); -if (jk_map_read_property(jk_worker_properties, line, +if (jk_map_read_property(jk_worker_properties, NULL, line, JK_MAP_HANDLE_DUPLICATES, conf->log) == JK_FALSE) return apr_pstrcat(cmd->temp_pool, "Invalid JkWorkerProperty ", line, NULL); @@ -3126,7 +3126,7 @@ jk_set_worker_def_cache_size(mpm_threads); if ((jk_worker_file != NULL) && -!jk_map_read_properties(jk_worker_properties, jk_worker_file, NULL, +!jk_map_read_properties(jk_worker_properties, NULL, jk_worker_file, NULL, JK_MAP_HANDLE_DUPLICATES, conf->log)) { ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, "Error in reading worker properties from '%s'", Modified: tomcat/connectors/trunk/jk/native/common/jk_map.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_map.c?rev=756058&r1=756057&r2=756058&view=diff == --- tomcat/connectors/trunk/jk/native/common/jk_map.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_map.c Thu Mar 19 15:52:06 2009 @@ -80,7 +80,7 @@ static void trim_prp_comment(char *prp); static size_t trim(char *s); static int map_realloc(jk_map_t *m); -jk_map_t *jk_environment_map = NULL; +static char *jk_map_replace_properties(jk_map_t *m, jk_map_t *env, char *value); int jk_map_alloc(jk_map_t **m) { @@ -455,7 +455,7 @@ } } -int jk_map_read_property(jk_map_t *m, const char *str, +int jk_map_read_property(jk_map_t *m, jk_map_t *env, const char *str, int treatment, jk_logger_t *l) { int rc = JK_TRUE; @@ -482,7 +482,7 @@ else { if (jk_map_validate_property(prp, l) == JK_FALSE) return JK_FALSE; -v = jk_map_replace_properties(m, v); +v = jk_map_replace_properties(m, env, v); if (jk_map_handle_duplicates(m, prp, &v, treatment, l) == JK_TRUE)
Re: Tagging JK 1.2.28
> can you please provide some basic information that helps us find the reason: > > 1) What was the original compiler error that you got, before adding > "extern". With the i5/OS C compiler, all vars defined in a .h are included in the objects (.o) using this include. Adding the extern solve the problem. > 2) What is the httpd and jk configuration that was used when the core > happened. Apache 2.0.5x (I didn't know which one) > 3) What did you have to do to get the core, e.g. which URL did you call, or > does it happen immediately during startup etc. During startup > 4) Can you provide the contents of the httpd error log and a JK log file > with log level trace containing startup and the core situation. I see : [Thu Mar 19 12:29:50.079 2009] [7590:3] [debug] jk_util.c (458): Pre-processed log time stamp format is '[%a %b %d %H:%M:%S.000 %Y] ' [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (770): rule map size is 3 [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (720): wildchar rule '/xylos-soa/*=xylos-soa-850' source 'JkMount' was added [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (720): wildchar rule '/jkmanager/*=jkstatus' source 'JkMount' was added [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (729): exact rule '/status/=jkstatus' source 'JkMount' was added [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (171): uri map dump after map open: index=0 file='(null)' reject_unsafe=0 reload=60 modified=0 checked=0 [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (176): generation 0: size=0 nosize=0 capacity=0 [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (176): generation 1: size=3 nosize=0 capacity=4 [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (186): NEXT (1) map #0: uri=/xylos-soa/* worker=xylos-soa-850 context=/xylos-soa/* source=JkMount type=Wildchar len=12 [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (186): NEXT (1) map #1: uri=/jkmanager/* worker=jkstatus context=/jkmanager/* source=JkMount type=Wildchar len=12 [Thu Mar 19 12:29:50.109 2009] [7590:3] [debug] jk_uri_worker_map.c (186): NEXT (1) map #2: uri=/status/ worker=jkstatus context=/status/ source=JkMount type=Exact len=8 [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_worker.c (116): found a worker xylos-soa-850 [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_worker.c (293): Found worker type 'ajp13' [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (512): Checking extension for worker 0: xylos-soa-850 of type ajp13 (2) [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_worker.c (116): found a worker jkstatus [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_worker.c (293): Found worker type 'status' [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (512): Checking extension for worker 1: jkstatus of type status (6) [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_worker.c (116): found a worker jkstatus [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_worker.c (293): Found worker type 'status' [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (512): Checking extension for worker 2: jkstatus of type status (6) [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (171): uri map dump after extension stripping: index=0 file='(null)' reject_unsafe=0 reload=60 modified=0 checked=0 [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (176): generation 0: size=0 nosize=0 capacity=0 [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (176): generation 1: size=3 nosize=0 capacity=4 [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (186): NEXT (1) map #0: uri=/xylos-soa/* worker=xylos-soa-850 context=/xylos-soa/* source=JkMount type=Wildchar len=12 [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (186): NEXT (1) map #1: uri=/jkmanager/* worker=jkstatus context=/jkmanager/* source=JkMount type=Wildchar len=12 [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (186): NEXT (1) map #2: uri=/status/ worker=jkstatus context=/status/ source=JkMount type=Exact len=8 [Thu Mar 19 12:29:50.191 2009] [7590:3] [debug] jk_uri_worker_map.c (482): Switching uri worker map from index 0 to index 1 [Thu Mar 19 12:29:53.099 2009] [7590:3] [debug] jk_util.c (458): Pre-processed log time stamp format is '[%a %b %d %H:%M:%S.000 %Y] ' [Thu Mar 19 12:29:53.099 2009] [7590:3] [debug] jk_uri_worker_map.c (770): rule map size is 3 [Thu Mar 19 12:29:53.099 2009] [7590:3] [debug] jk_uri_worker_map.c (720): wildchar rule '/xylos-soa/*=xylos-soa-850' source 'JkMount' was added [Thu Mar 19 12:29:53.099 2009] [7590:3] [debug] jk_uri_worker_map.c (720): wildchar rule '/jkmanager/*=jkstatus' source 'JkMount' was added [Thu Mar 19 12:29:53.099 2009] [7590:3] [debug] jk_uri_worker_map.c (729): exact rule '/status/=jkstatus' source 'JkMo
Re: Tagging JK 1.2.28
On 19.03.2009 16:47, Henri Gomez wrote: can you please provide some basic information that helps us find the reason: 1) What was the original compiler error that you got, before adding "extern". With the i5/OS C compiler, all vars defined in a .h are included in the objects (.o) using this include. Adding the extern solve the problem. I just provided a slightly different solution as revision 756058. I will put a source tarball based on this at the dev/dist in a few minutes and let you know. 2) What is the httpd and jk configuration that was used when the core happened. Apache 2.0.5x (I didn't know which one) 3) What did you have to do to get the core, e.g. which URL did you call, or does it happen immediately during startup etc. During startup Then it should be easy for us to debug :) 4) Can you provide the contents of the httpd error log and a JK log file with log level trace containing startup and the core situation. I see : ... Would it be easy for you to retry with JkLogLevel trace? trace gives us much more precise information, whenever the code enters and leaves a function, so usually we see very easily, where the crash happens. debug doesn't provide that info. Thanks! Rainer - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
DO NOT REPLY [Bug 46875] CometConnectionManagerValve: concurrent access on session object when calling HttpSession.invalidate()
https://issues.apache.org/bugzilla/show_bug.cgi?id=46875 --- Comment #1 from Remy Maucherat 2009-03-19 11:23:19 PST --- I think you have a fair point, but not much can be done about it. These events are asynchronous, so the most likely is that it will be processed after the session is gone, and not much can be done about that. I think the calls to the session should be safer (wrapped with a try/catch). -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email --- You are receiving this mail because: --- You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org