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

Clinton H Goudie-Nice commented on OAK-2752:
--------------------------------------------

It looks to me as though the check of while(reference != null) might be able to 
continue indefinitely if the weak reference it is referring to is garbage 
collected. shouldRefresh will probably be set, but refresh() wont be run since 
it is outside the loop, and so reference will still be in the list.

Additionally, if shouldRefresh = true and it identifies an ID, it will return 
out without running the refresh, so stale entries will still be in the list.

It looks to my eyes as though Will's patch will allow the thread to properly 
break out, and trigger the refresh, however I see that the original intent was 
to avoid using a map. This part probably deserves a review. 

> SegmentIdTable can sometimes hang when calling getSegmentId(msb, lsb)
> ---------------------------------------------------------------------
>
>                 Key: OAK-2752
>                 URL: https://issues.apache.org/jira/browse/OAK-2752
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: oak-core
>    Affects Versions: 1.2
>            Reporter: Will McGauley
>            Priority: Critical
>             Fix For: 1.2.1
>
>         Attachments: OAK-2752.patch
>
>
> The while loop getSegmentId(msb, lsb) loops forever in the situation where 
> the segment id is not found. 
> Looping occurs from 'first' and loops to the end of the SegmentId references, 
> and then loops back to first.  If the segmentid is not found in any of the 
> referenced items then looping continues past 'first' again and loops for 
> eternity through all the references.
> See attached patch for possible fix to break out of the loop after getting 
> back to 'first' again.
> note: I have tested this patch on my system and it seems to work, but I do 
> not know if the patch provides the best fix, I am a bit new to this code.  
> The most important part of the patch would be the break condition from the 
> loop so the loop does not continue after testing each reference



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

Reply via email to