I have already forward your 2 emails to TOMCAT-developer, haha :-) Bo Dec.06, 2001
----- Original Message ----- From: "Jeff Kilbride" <[EMAIL PROTECTED]> To: "Tomcat Users List" <[EMAIL PROTECTED]> Sent: Thursday, December 06, 2001 2:41 PM Subject: Re: Double check idiom broken - Tomcat uses it ? > If you really want the developers to take a look at this, you should > probably post it to the tomcat-dev list. It's iffy whether or not they will > see it here. > > Thanks, > --jeff > > ----- Original Message ----- > From: "java programmer" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Wednesday, December 05, 2001 10:44 PM > Subject: Double check idiom broken - Tomcat uses it ? > > > > Hi all: > > > > We all know that the lazy-double-check idiom doesn't > > apply to Java because of the Java Memory Model (JMM). > > > > That is to say, look at code such as: > > > > Example a) > > // Set by any other thread other than #1 > > volatile boolean stop = false; > > > > // Thread #1 runs this as long as > > // stop is false. Only T1 will call this > > // method, so not synchronized. hence > > // broken due to staleness of 'stop'. > > // synch for _visbility_ ALSO. > > void foo() { > > while (!stop ) { //... } > > } > > > > > > Example b): The lazy double check idiom > > public static Foo haha = null; > > public static getFoo() { > > if (foo == null ) { > > sychronized (Foo.class) { > > if (foo == null ) > > foo = new Foo(); > > } > > } > > return foo; > > } > > > > Both examples are *guaranteed* to be incorrect. > > Note, this is the case, *even* though I am using > > 'volatile' for the stop variable. For more on the > > JMM, consult Item #48 in Effective Java (Josh Bloch), > > look at Bill Pughs' page at: > > http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html > > or check out Doug Lea's stuff. > > Well, here is the thing: > > > > Quite idly, and randomly, I was looking at: > > > > org.apache.jasper.servlet.JspServlet > > > > and I found: > > > > <snip> > > outDated = compiler.isOutDated(); > > if(!jsw.isInstantiated() || outDated ) { > > synchronized(jsw){ > > outDated = compiler.compile(); > > if(!jsw.isInstantiated() || outDated) { > > if( null ==ctxt.getServletClassName() ) { > > <snip> > > > > This is a complex use of double check type > > code and is really hard to analyse because references > > themselves and what they point to can have > > different levels of staleness (according to the JMM). > > So it's a turbo double idiom type usage, possibly > > incorrect. > > > > I just wanted to bring this to the attention of the > > development team and make sure that *someone* has > > really analysed this according to the JMM. (and > > any other code, similar to this). > > > > Best regards, > > > > [EMAIL PROTECTED] > > > > > > > > > > __________________________________________________ > > Do You Yahoo!? > > Send your FREE holiday greetings online! > > http://greetings.yahoo.com > > > > -- > > To unsubscribe: <mailto:[EMAIL PROTECTED]> > > For additional commands: <mailto:[EMAIL PROTECTED]> > > Troubles with the list: <mailto:[EMAIL PROTECTED]> > > > > > -- > To unsubscribe: <mailto:[EMAIL PROTECTED]> > For additional commands: <mailto:[EMAIL PROTECTED]> > Troubles with the list: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe: <mailto:[EMAIL PROTECTED]> For additional commands: <mailto:[EMAIL PROTECTED]> Troubles with the list: <mailto:[EMAIL PROTECTED]>