Bug 112340 - java.util.ConcurrentModificationException thrown when more than one person performs certain actions
java.util.ConcurrentModificationException thrown when more than one person pe...
Status: CLOSED WONTFIX
Product: Red Hat Enterprise CMS
Classification: Retired
Component: ui (Show other bugs)
6.0
All Linux
medium Severity high
: ---
: ---
Assigned To: Vadim Nasardinov
Jon Orris
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2003-12-17 19:21 EST by Richard Su
Modified: 2007-04-18 13:00 EDT (History)
4 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2006-09-05 13:48:38 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Richard Su 2003-12-17 19:21:29 EST
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5)
Gecko/20031007

Description of problem:
I've found that an error is thrown when more than one person does any
of the following at the same time:

1. Completes a workflow task
2. Publishes an item
3. Unpublishes an item
4. Delete an workflow

Here's the full error report:

-*-*-*-*-*- Begin Error Report -*-*-*-*-*-
-*-*-*- ACS Error Report Code: 192.168.1.52:2987f9:f985f321e0 -*-*-*-
-*-*-*- Message: null -*-*-*-

-*-*-*- Section: HTTP headers -*-*-*-
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel,
application/msword, */*
Accept-Encoding: gzip, deflate
Accept-Language: en-us
Cache-Control: no-cache
Connection: Keep-Alive
Cookie: ad_user_login=85006!1166299513621!Y8bRNaVvWhLpjthiy6Tu8A==;
CP=null*; JSESSIONID=atKUqT8vtoig
Host: 64.49.242.52
Referer:
http://64.49.242.52/ccm/content/admin/item.jsp?bbp.3.pane=1&bbp.6419.stack=6422&bbp.5689.sel=61004&bbp.4472.sel=69002&bbp.1110.sel=118001&bbp.6442.col=0&bbp.8.stack=%5E6607%5E6606&bbp.245.sel=112001&bbp.976.sel=117001&bbp.2779.sel=124001&bbp.2708.d=asc&bbp.6402.d=asc&bbp.5680.row=182001&bbp.3953.sel=65002&bbp.5233.sel=55003&bbp.5932.sel=64003&bbp.609.sel=114001&bbp.7.stack=%5E6418%5E6416%5E6415&bbp.4954.sel=52003&bbp.1462.sel=120001&bbp.1568.sel=121001&bbp.2595.sel=123001&bbp.4714.sel=71002&bbp.4827.d=asc&bbp.109.sel=111001&bbp.5802.d=asc&bbp.2085.sel=122001&bbp.467.sel=113001&bbp.3441.sel=59002&bbp.5680.col=1&bbp.5438.sel=58003&bbp.845.sel=116001&bbp.2870.d=asc&bbp.6442.row=182001&bbp.5324.d=asc&bbp.722.sel=115001&bbp.6696.d=asc&bbp.4231.sel=67002&bbp.6179.sel=66003&item_id=123007&g11n.enc=UTF-8&bbp.3194.sel=56002&bbp.31.sel=12011&bbp.6709.d=asc&bbp.v=182001+2&bbp.s=5680&bbp.i=d0.4.2.a.1.23.1.3q.1.66.1.3y.1.33.1.3e.1.3m.1.3o.1.6a.1.3i.1.2v.1.ec.1.e4.1.54.1.4h.1.6z.1.6u.1.7i.1.6o.1.7p.1.6o.1.6o.1.6o.1.7q.1.5o.1.6y.1.6q.1.6u.1.78.1&bbp.e=cell&bbp.1336.sel=119001&bbp.3712.sel=62002&bbp.2942.sel=53002&g11n.enc=UTF-8
SCRIPT_URI: http://stagingq-a.soa.org/ccm/content/admin/item.jsp
SCRIPT_URL: /ccm/content/admin/item.jsp
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)

-*-*-*- Section: Cookies -*-*-*-
ad_user_login: 85006!1166299513621!Y8bRNaVvWhLpjthiy6Tu8A== (expires: -1)
CP: null* (expires: -1)
JSESSIONID: atKUqT8vtoig (expires: -1)

-*-*-*- Section: CCM User -*-*-*-
Party not logged in

-*-*-*- Section: Stack trace -*-*-*-
java.util.ConcurrentModificationException
	at
java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:530)
	at java.util.LinkedList$ListItr.next(LinkedList.java:471)
	at com.arsdigita.bebop.FormData.createParameterData(FormData.java:576)
	at com.arsdigita.bebop.FormData.<init>(FormData.java:268)
	at com.arsdigita.bebop.FormData.<init>(FormData.java:161)
	at com.arsdigita.bebop.PageState.<init>(PageState.java:309)
	at com.arsdigita.bebop.Page.process(Page.java:677)
	at com.arsdigita.bebop.Page.buildDocument(Page.java:732)
	at com.arsdigita.cms.dispatcher.CMSPage$1.excurse(CMSPage.java:280)
	at com.arsdigita.cms.CMSExcursion$1.excurse(CMSExcursion.java:82)
	at com.arsdigita.kernel.KernelExcursion.run(KernelExcursion.java:57)
	at com.arsdigita.cms.CMSExcursion.run(CMSExcursion.java:77)
	at com.arsdigita.cms.dispatcher.CMSPage.dispatch(CMSPage.java:294)
	at
_packages._content_22dsection._www._admin._item__jsp._jspService(_item__jsp.java:60)
	at com.caucho.jsp.JavaPage.service(JavaPage.java:75)
	at com.caucho.jsp.Page.subservice(Page.java:485)
	at
com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:182)
	at com.caucho.server.http.Invocation.service(Invocation.java:312)
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:213)
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:100)
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:77)
	at
com.arsdigita.dispatcher.DispatcherHelper.forwardHelper(DispatcherHelper.java:180)
	at
com.arsdigita.dispatcher.DispatcherHelper.forwardRequestByPath(DispatcherHelper.java:209)
	at
com.arsdigita.dispatcher.DispatcherHelper.forwardRequestByPath(DispatcherHelper.java:222)
	at
com.arsdigita.cms.dispatcher.FileDispatcher$1.excurse(FileDispatcher.java:68)
	at com.arsdigita.cms.CMSExcursion$1.excurse(CMSExcursion.java:82)
	at com.arsdigita.kernel.KernelExcursion.run(KernelExcursion.java:57)
	at com.arsdigita.cms.CMSExcursion.run(CMSExcursion.java:77)
	at
com.arsdigita.cms.dispatcher.FileDispatcher.chainedDispatch(FileDispatcher.java:71)
	at
com.arsdigita.dispatcher.DispatcherChain.dispatch(DispatcherChain.java:74)
	at
com.arsdigita.cms.ContentSectionServlet.doService(ContentSectionServlet.java:143)
	at
com.arsdigita.web.BaseApplicationServlet$1.excurse(BaseApplicationServlet.java:111)
	at com.arsdigita.kernel.KernelExcursion.run(KernelExcursion.java:57)
	at
com.arsdigita.web.BaseApplicationServlet.doService(BaseApplicationServlet.java:105)
	at com.arsdigita.web.BaseServlet$1.excurse(BaseServlet.java:119)
	at com.arsdigita.kernel.KernelExcursion.run(KernelExcursion.java:57)
	at com.arsdigita.web.BaseServlet.internalService(BaseServlet.java:94)
	at com.arsdigita.web.BaseServlet.doGet(BaseServlet.java:196)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
	at
com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
	at com.caucho.server.http.Invocation.service(Invocation.java:312)
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:213)
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:100)
	at
com.caucho.server.http.QRequestDispatcher.forward(QRequestDispatcher.java:77)
	at com.arsdigita.web.BaseDispatcher.forward(BaseDispatcher.java:214)
	at com.arsdigita.web.BaseDispatcher.forward(BaseDispatcher.java:200)
	at com.arsdigita.web.BaseDispatcher.dispatch(BaseDispatcher.java:132)
	at
com.arsdigita.web.DispatcherServlet.service(DispatcherServlet.java:134)
	at
com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
	at com.caucho.server.http.Invocation.service(Invocation.java:312)
	at
com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:342)
	at
com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:272)
	at com.caucho.server.TcpConnection.run(TcpConnection.java:137)
	at java.lang.Thread.run(Thread.java:479)


-*-*-*- Section: Servlet attributes -*-*-*-
com.arsdigita.cms.dispatcher.section:
[com.arsdigita.cms.ContentSection:{id=33006}]
com.arsdigita.dispatcher.RequestContext:
com.arsdigita.sitenode.SiteNodeRequestContext@5ef849
com.arsdigita.dispatcher.RequestValue:
{com.arsdigita.dispatcher.RequestValue@6c9c37=null}
com.arsdigita.web.BaseApplicationServlet.application_id: 33006
com.arsdigita.web.BaseDispatcher.dispatched: true
com.arsdigita.web.BaseServlet.request_url:
/ccm/content/admin/item.jsp?bbp.4231.sel=67002&bbp.1110.sel=118001&bbp.6179.sel=66003&bbp.1462.sel=120001&bbp.2942.sel=53002&bbp.6442.row=182001&bbp.6696.d=asc&bbp.4714.sel=71002&bbp.6419.stack=6422&bbp.722.sel=115001&bbp.5438.sel=58003&bbp.3194.sel=56002&bbp.109.sel=111001&bbp.4954.sel=52003&bbp.609.sel=114001&bbp.i=d0.4.2.a.1.23.1.3q.1.66.1.3y.1.33.1.3e.1.3m.1.3o.1.6a.1.3i.1.2v.1.ec.1.e4.1.54.1.4h.1.6z.1.6u.1.7i.1.6o.1.7p.1.6o.1.6o.1.6o.1.7q.1.5o.1.6y.1.m.1.5x.2.4.1.6u.1.78.1&bbp.2085.sel=122001&bbp.31.sel=12011&bbp.845.sel=116001&bbp.245.sel=112001&bbp.1336.sel=119001&bbp.2870.d=asc&bbp.1568.sel=121001&bbp.3953.sel=65002&bbp.3441.sel=59002&bbp.6402.d=asc&bbp.3.pane=1&bbp.5689.sel=61004&bbp.5233.sel=55003&bbp.5680.col=2&bbp.4827.d=asc&g11n.enc=UTF-8&bbp.3712.sel=62002&bbp.976.sel=117001&bbp.2779.sel=124001&bbp.8.stack=%5E6607%5E6606&bbp.5324.d=asc&bbp.7.stack=%5E6418%5E6416%5E6415&bbp.4472.sel=69002&bbp.6709.d=asc&bbp.5932.sel=64003&bbp.5802.d=asc&bbp.467.sel=113001&bbp.2595.sel=123001&bbp.2708.d=asc&item_id=123007&bbp.6442.col=0

-*-*-*- Section: Request summary -*-*-*-
Context path: 
Request URI: /__ccm__/servlet/content-section/admin/item.jsp
Query string:
app-id=33006&bbp.3.pane=1&bbp.6419.stack=6422&bbp.5689.sel=61004&bbp.4472.sel=69002&bbp.1110.sel=118001&bbp.6442.col=0&bbp.8.stack=%5E6607%5E6606&bbp.245.sel=112001&bbp.976.sel=117001&bbp.2779.sel=124001&bbp.2708.d=asc&bbp.6402.d=asc&bbp.3953.sel=65002&bbp.5233.sel=55003&bbp.5932.sel=64003&bbp.609.sel=114001&bbp.7.stack=%5E6418%5E6416%5E6415&bbp.4954.sel=52003&bbp.1462.sel=120001&bbp.1568.sel=121001&bbp.2595.sel=123001&bbp.4714.sel=71002&bbp.4827.d=asc&bbp.109.sel=111001&bbp.5802.d=asc&bbp.2085.sel=122001&bbp.467.sel=113001&bbp.3441.sel=59002&bbp.5680.col=2&bbp.5438.sel=58003&bbp.845.sel=116001&bbp.2870.d=asc&bbp.6442.row=182001&bbp.5324.d=asc&bbp.722.sel=115001&bbp.6696.d=asc&bbp.4231.sel=67002&bbp.6179.sel=66003&item_id=123007&g11n.enc=UTF-8&bbp.3194.sel=56002&bbp.31.sel=12011&bbp.6709.d=asc&bbp.i=d0.4.2.a.1.23.1.3q.1.66.1.3y.1.33.1.3e.1.3m.1.3o.1.6a.1.3i.1.2v.1.ec.1.e4.1.54.1.4h.1.6z.1.6u.1.7i.1.6o.1.7p.1.6o.1.6o.1.6o.1.7q.1.5o.1.6y.1.m.1.5x.2.4.1.6u.1.78.1&bbp.1336.sel=119001&bbp.3712.sel=62002&bbp.2942.sel=53002
Method: GET
Remote user: null

-*-*-*- Section: System properties -*-*-*-
com.arsdigita.london.navigation.DefaultContentSection: /content/
file.encoding: ISO-8859-1
file.encoding.pkg: sun.io
file.separator: /
java.awt.fonts: 
java.awt.graphicsenv: sun.awt.X11GraphicsEnvironment
java.awt.printerjob: sun.awt.motif.PSPrinterJob
java.class.path:
:/var/ccm-devel/web/ccm/soa/webapps/ccm/WEB-INF/lib/jaas.jar:/var/ccm-devel/web/ccm/soa/webapps/ccm/WEB-INF/lib/jce.jar:/var/ccm-devel/web/ccm/soa/webapps/ccm/WEB-INF/lib/sunjce_provider.jar:/var/ccm-devel/web/ccm/soa/webapps/ccm/WEB-INF/lib/xerces.jar:/var/ccm-devel/web/ccm/soa/webapps/ccm/WEB-INF/lib/xalan.jar:/usr/share/pgsql/rh-postgresql2.jar:/opt/resin/2.1.4/lib/jaxp.jar:/opt/resin/2.1.4/lib/dom.jar:/opt/resin/2.1.4/lib/jdbc2_0-stdext.jar:/opt/resin/2.1.4/lib/jdbc-mysql.jar:/opt/resin/2.1.4/lib/jndi.jar:/opt/resin/2.1.4/lib/jmx.jar:/opt/resin/2.1.4/lib/jta-spec1_0_1.jar:/opt/resin/2.1.4/lib/resin.jar:/opt/resin/2.1.4/lib/sax.jar:/opt/resin/2.1.4/lib/webutil.jar:/opt/jdk1.3.1_09/lib/tools.jar:/opt/jdk1.3.1_09/jre/lib/rt.jar:/opt/resin/2.1.4/lib/jsdk23.jar
java.class.version: 47.0
java.ext.dirs: /opt/jdk1.3.1_09/jre/lib/ext
java.home: /opt/jdk1.3.1_09/jre
java.io.tmpdir: /tmp
java.library.path:
/opt/jdk1.3.1_09/jre/lib/i386:/opt/jdk1.3.1_09/jre/lib/i386/native_threads/:/opt/jdk1.3.1_09/jre/lib/i386/server:/opt/jdk1.3.1_09/jre/../lib/i386::libexec
java.naming.factory.initial: com.caucho.naming.InitialContextFactoryImpl
java.naming.factory.url.pkgs: com.caucho.naming
java.runtime.name: Java(TM) 2 Runtime Environment, Standard Edition
java.runtime.version: 1.3.1_09-b03
java.specification.name: Java Platform API Specification
java.specification.vendor: Sun Microsystems Inc.
java.specification.version: 1.3
java.vendor: Sun Microsystems Inc.
java.vendor.url: http://java.sun.com/
java.vendor.url.bug: http://java.sun.com/cgi-bin/bugreport.cgi
java.version: 1.3.1_09
java.vm.info: mixed mode
java.vm.name: Java HotSpot(TM) Server VM
java.vm.specification.name: Java Virtual Machine Specification
java.vm.specification.vendor: Sun Microsystems Inc.
java.vm.specification.version: 1.0
java.vm.vendor: Sun Microsystems Inc.
java.vm.version: 1.3.1_09-b03
javax.xml.parsers.DocumentBuilderFactory:
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
javax.xml.parsers.SAXParserFactory:
org.apache.xerces.jaxp.SAXParserFactoryImpl
javax.xml.transform.TransformerFactory:
com.icl.saxon.TransformerFactoryImpl
line.separator: 

os.arch: i386
os.name: Linux
os.version: 2.4.9-e.27smp
path.separator: :
PreferredXSLTTransformer: SAXON
resin.home: /opt/resin/2.1.4
sun.boot.class.path:
/opt/jdk1.3.1_09/jre/lib/rt.jar:/opt/jdk1.3.1_09/jre/lib/i18n.jar:/opt/jdk1.3.1_09/jre/lib/sunrsasign.jar:/opt/jdk1.3.1_09/jre/classes
sun.boot.library.path: /opt/jdk1.3.1_09/jre/lib/i386
sun.cpu.endian: little
sun.cpu.isalist: 
sun.io.unicode.encoding: UnicodeLittle
user.dir: /opt/resin/2.1.4
user.home: /home/ccm
user.language: en
user.name: ccm
user.region: US
user.timezone: America/Chicago
-*-*-*-*-*- End Error Report -*-*-*-*-*-



Version-Release number of selected component (if applicable):


How reproducible:
Sometimes

Steps to Reproduce:
1. Have two persons perform any of the tasks listed above at the same
time.
2.
3.
    

Actual Results:  A java.util.ConcurrentModificationException is thrown.

Expected Results:  Task should complete successfully.

Additional info:
Comment 1 Richard Li 2003-12-18 11:19:03 EST
would 111497 be related at all?
Comment 2 Vadim Nasardinov 2003-12-18 11:28:50 EST
It might be related in the sense that none of the following classes
and/or JSP pages have any "synchronized" code blocks:

  Page
  CMSPage
  ContentItemPage
  item.jsp


On an unrelated note,
//cms/dev/web/packages/content-section/www/admin/item.jsp#7 looks a
little sketchy in how it initializes the itemPage variable.  Justin
and I think that we might get an NPE in item.jsp, if the servlet
container unloads the item.jsp servlet and then reloads it, so that
the following "if" block's body is not entered

    if (Utilities.getLastSectionRefresh(section).after(timestamp)) {
        itemPage = new ContentItemPage();
        timestamp = new Date();
    }

(That's the theory.  In practice, the servlet probably never gets ever
unloaded which prevents the NPE from materializing.)
Comment 3 Richard Su 2003-12-18 13:16:03 EST
I don't think this bug is related to 111497 as the stack trace is
different and this bug is triggered differently from 111497. We
haven't seen any problems with viewing a page concurrently. Our
problem has more to do with performing certains actions concurrently
from the CMS admin UI.

Somewhere in the code I think we just need to synchronize access to
some object to prevent the problem. Don't know where yet.
Comment 4 Richard Su 2003-12-22 16:16:32 EST
Tzu-Mainn has a fix for this bug at p4 39016. Would it be possible for
someone in engineering to take a look at the fix to confirm. Thanks.

Comment 5 Vadim Nasardinov 2003-12-22 17:40:50 EST
Two comments.

Change 39016 makes a modification that is explicitly at odds with the
documented purpose of the affected block of code.  Before the change:

    // page needs to be refreshed when content types or authoring kits
    // in the section change
    if (Utilities.getLastSectionRefresh(section).after(timestamp)) {
        itemPage = new ContentItemPage();
        timestamp = new Date();
    }

After the change:

    // page needs to be refreshed when content types or authoring kits
    // in the section change
    if (Utilities.getLastSectionRefresh(section).after(timestamp)) {
        itemPage = ContentItemPage.retrieveContentItemPage();
        timestamp = new Date();
    }

As far as I can tell, the purpose of the "if" block is to make sure we
get a _new_ instance of ContentItemPage when certain changes have been
made to the content section.  Change 39016 completely defeats this
logic by creating a ContentItemPage once and caching it for the
lifetime of the ContentItemPage class.  I don't know whether this is
the right thing to do or not.  If it is the right thing, then, at the
very least, we should remove the "if" block that has been rendered
meaningless by the above change.

The second comment is that this change does not seem to go to the
heart of the issue.  It does not eliminate the race condition.  It
merely seems to narrow down the window of opportunity for concurrent
modification to occur.  (Whether or not this is good enough for
practical purposes, I don't know.)
Comment 6 Richard Su 2004-01-07 17:19:51 EST
I think this problem may be related to bz 112987 as the error posted
by Bryan is also an error we see. In reproducing the problem,
sometimes we see the java.util.ConcurrentModificationException I
posted above, other times we see the java.lang.IllegalStateException:
Illegal access to an unlocked com.arsdigita.bebop.FormModel Bryan
posted in his bug report.

I'm going to look further.
Comment 7 Richard Su 2004-01-07 19:00:16 EST
Ok, in cms/web/packages/content-section/www/admin/item.jsp I wrapped
these lines in a synchronized block:

   if (Utilities.getLastSectionRefresh(section).after(timestamp)) {
        itemPage = new ContentItemPage();
        timestamp = new Date();
    }

    RequestContext context = DispatcherHelper.getRequestContext(request);
    itemPage.init();
    itemPage.dispatch(request, response, context);

Like so:

    synchronized (this) {
    if (Utilities.getLastSectionRefresh(section).after(timestamp)) {
        itemPage = new ContentItemPage();
        timestamp = new Date();
    }

    RequestContext context = DispatcherHelper.getRequestContext(request);
    itemPage.init();
    itemPage.dispatch(request, response, context);
 }

And it clears up both problems we've seen. Somewhere in the code, the
Page is being dispatched before it is locked.  I believe the FormModel
is locked when the Page is locked. I need to investigate futhur.
Comment 8 Vadim Nasardinov 2004-01-07 19:55:18 EST
There are two threads accessing the same object before it has been
completely initialized.  As a starting point for further
investigation, two stack traces are needed, one for each of the
contending threads.  You can use the following class to capture the
stack trace along with the name of the tread in which it is created.


public class StackTrace extends Throwable {
    private final String m_thread = Thread.currentThread().getName();

    public String getMessage() {
        return m_thread;
    }
}

To debug, you can add something like this to FormModel (or whatever
other class is most appropriate in your judgement):

public class FormData {
    public Throwable CREATION_STACK = new StackTrace();

    // ... other stuff ...
}


Now, in FormData.createParameterData, catch the
ConcurrentModificationException and log two stack traces:


  try {
      // do stuff that throws an exception due to concurrent access
      // by two threads
  } catch (WhateverExceptionIsThrown ex) {
     s_log.debug("object created at", formData.CREATION_STACK);
     s_log.debug("concurrently accessed at", new StackTrace());
     throw ex;
  }

In theory, this should show that two distinct threads are accessing
the same object, before one of the threads had a chance to finish its
initialization.
Comment 9 Richard Su 2004-01-08 14:53:56 EST
I think I made some progess, if you can call it that. I reverted all
changes to item.jsp and ContentItemPage.java back to its original
state in 6.0.1. I then upgraded Resin from 2.1.4 to 2.1.12, which is
the latest. After doing those two things, the problem has disappeared. 

I added some observations to why this is happenting to a comment on
bug 112987. Why Resin behaves differently from 2.1.4 to 2.1.12 is
still a mystery to me.
Comment 10 Vadim Nasardinov 2004-01-16 18:28:51 EST
Keith,

I'm going to look at this on Monday.  If I don't get to the bottom of
this, the Richard's solution that he presented in comment #7 looks
good to me.  The amount of time we would spend in the synchronized
block does not seem all that excessive.  I have a feeling that the
lack of synchronization should be addressed either in the Page class,
or PageState class, to solve this problem once and for all, rather
than fixing each individual JSP that happens to use these classes.

That said, Richard's fix seems like a good short-term (and quite
possibly long-term) solution.
Comment 11 Vadim Nasardinov 2004-01-26 12:52:35 EST
Fixed on the trunk in change 39754.
Comment 12 David Lawrence 2006-07-17 22:59:37 EDT
QA_READY has been deprecated in favor of ON_QA. Please use ON_QA in the future.
Moving to ON_QA.
Comment 13 Jon Orris 2006-09-05 13:48:38 EDT
Closing old tickets



Note You need to log in before you can comment on or make changes to this bug.