> From: news [mailto:[EMAIL PROTECTED] On Behalf Of Bill Barker
> Subject: Re: Multi processor issue
>
> After the request parameters are parsed, Tomcat makes it's
> parameter map read-only (i.e. "locked").
This is true, but it's not a simple case of someone calling put() after
locking the ParameterMap. Here's the code of interest
(org.apache.catalina.connector.Request):
1015 public Map getParameterMap() {
1017 if (parameterMap.isLocked())
1018 return parameterMap;
1020 Enumeration enumeration = getParameterNames();
1021 while (enumeration.hasMoreElements()) {
1022 String name = enumeration.nextElement().toString();
1023 String[] values = getParameterValues(name);
1024 parameterMap.put(name, values);
1025 }
1027 parameterMap.setLocked(true);
1029 return parameterMap;
1031 }
The stack trace shows the failed call to put() being made from line
1024. In order to get this far, the test for isLocked() at line 1017
must have returned false. In other words, the locked state of the
ParameterMap associated with this request changed between lines 1017 and
1024. Since locked isn't set until line 1027 (and that appears to be
the only place in Tomcat that does so), some thread other than the one
in the stack trace must have changed the state by coming through this
code simultaneously. Restricting Tomcat to a single CPU almost
completely precludes that from ever happening. (But if left running
long enough - possibly years - the situation could still occur with a
single CPU, when one thread's time slice expired between lines 1020 and
1025, and whatever second thread is also erroneously processing the same
Request object starts running. Contrary to what another poster stated,
this is definitely a multi-thread issue, not a multi-processor one.)
If hardware or OS infrastructure were the cause, I would expect that to
manifest itself in more ways than just this one particular situation in
Tomcat. If it were my system, I'd be adding some trap code to mark a
Request object as taken when a thread starts processing it, and verify
that a request isn't already taken when a thread starts processing it.
Unfortunate that the OP's company seems to have lost interest in fixing
what appears to be a bona fide problem in their application.
- Chuck
THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY
MATERIAL and is thus for use only by the intended recipient. If you
received this in error, please contact the sender and delete the e-mail
and its attachments from all computers.
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]