[ 
https://issues.apache.org/jira/browse/GEODE-4083?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16291089#comment-16291089
 ] 

ASF subversion and git services commented on GEODE-4083:
--------------------------------------------------------

Commit b1486ae6d830d6c707264f1a03509a621cb95570 in geode's branch 
refs/heads/develop from [~eshu]
[ https://gitbox.apache.org/repos/asf?p=geode.git;h=b1486ae ]

GEODE-4083: fix infinite loop caused by thread race changing version (#1161)

* GEODE-4083: fix infinite loop caused by thread race changing version



> RegionVersionVector.updateLocalVersion can go into an infinite loop
> -------------------------------------------------------------------
>
>                 Key: GEODE-4083
>                 URL: https://issues.apache.org/jira/browse/GEODE-4083
>             Project: Geode
>          Issue Type: Bug
>          Components: regions
>            Reporter: Darrel Schneider
>            Assignee: Eric Shu
>
> RegionVersionVector.updateLocalVersion can go into an infinite loop.
> The problem is this code:
> {code}
>   private void updateLocalVersion(long version) {
>     boolean repeat = false;
>     do {
>       long myVersion = this.localVersion.get();
>       if (myVersion < version) {
>         repeat = !this.localVersion.compareAndSet(myVersion, version);
>       }
>     } while (repeat);
>   }
> {code}
> if version is "1" and localVersion.get() returns "0" the first time it is 
> called but then compareAndSet returns false because localVersion has changed 
> to "2" then the loop will never terminate because repeat will always be false 
> and myVersion ("2" or more) will never be less than version ("1").
> The simple fix is to be sure repeat is set to false when myVersion is >= to 
> version.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to