Ted Yu created KYLIN-1563:
-----------------------------

             Summary: Unsafe check of initiated in HybridInstance#init()
                 Key: KYLIN-1563
                 URL: https://issues.apache.org/jira/browse/KYLIN-1563
             Project: Kylin
          Issue Type: Bug
            Reporter: Ted Yu


{code}
    private void init() {
        if (initiated == true)
            return;

        synchronized (this) {
            if (initiated == true)
                return;

            if (realizationEntries == null || realizationEntries.size() == 0)
                throw new IllegalArgumentException();
{code}
Suppose there are two threads executing the above code.

Thread1 uses the value read from field initiated in the condition initiated == 
true. It sees that the condition is false.
Thread2 checks variable initiated, reading it after Thread1 assigns to 
initiated but before some of the correlated field assignments take place. It 
sees the condition initiated == true as being true. It continues on before the 
critical section has completed, and can read data changed by that critical 
section while it is in an inconsistent state.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to