Incorrect double checked locking idiom used in VTIResultSet
-----------------------------------------------------------
Key: DERBY-4497
URL: https://issues.apache.org/jira/browse/DERBY-4497
Project: Derby
Issue Type: Bug
Components: SQL
Affects Versions: 10.5.3.0
Environment: OS: Redhat-5 Linux 2.6.18-92.el5
JDK: java version "1.6.0"
Java(TM) SE Runtime Environment (build pxi3260sr4-20090219_01(SR4))
IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Linux x86-32
jvmxi3260-20090215_29883 (JIT enabled, AOT enabled)
J9VM - 20090215_029883_lHdSMr
JIT - r9_20090213_2028
GC - 20090213_AA)
JCL - 20090218_01
Reporter: Daniel Luo
In method setSharedState of class VTIResultSet, double checked locking idiom is
used. But the field compileTimeConstants involved in the idiom is not declared
with volatile modifier which is incorrect. Simply add volatile modifier in
field compileTimeConstants declaration can quickly fix the problem. Below link
and description explain the details.
http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#dcl
"The double-checked locking idiom (also called the multithreaded singleton
pattern) is a trick designed to support lazy initialization while avoiding the
overhead of synchronization. Sometimes it doesn't work correctly since the
writes initializing the object and the write to the field storing the object
instance can be reordered by the compiler or the cache, which would have the
effect of returning what appears to be a partially constructed object instance.
The result would be that we read an uninitialized object. In JVMs 1.5 or above,
the use of the volatile keyword in field declaration would eliminate the
problems."
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.