[ 
https://issues.apache.org/jira/browse/DERBY-4497?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen updated DERBY-4497:
--------------------------------------

      Issue & fix info: [Known fix]  (was: [Known fix, High Value Fix])
               Urgency: Normal  (was: Urgent)
    Bug behavior facts:   (was: [Wrong query result, Data corruption])

As far as I can see, the code in question is not currently in use, so I'm 
lowering the urgency to normal.

> 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
>   Original Estimate: 0.08h
>  Remaining Estimate: 0.08h
>
> 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.

Reply via email to