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

Knut Anders Hatlen updated DERBY-3909:
--------------------------------------

    Attachment: Derby3909.java

Attaching the test I described in my previous comment.

> Race condition in NetXAResource.removeXaresFromSameRMchain()
> ------------------------------------------------------------
>
>                 Key: DERBY-3909
>                 URL: https://issues.apache.org/jira/browse/DERBY-3909
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Client
>    Affects Versions: 10.5.0.0
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: d3909.diff, Derby3909.java
>
>
> NetXAResource.removeXaresFromSameRMchain() does the following to remove a 
> NetXAResource from what's logically a singly-linked list:
> 1) Mark the NetXAResource to remove with a flag (a field called ignoreMe_)
> 2) Synchronize on an object that protects the linked list
> 3) Follow the chain of next pointers in the linked list and remove the first 
> flagged object
> 4) Release synchronization lock obtained in (2)
> 5) Clear the flag set in (1)
> Now, say that two threads (T1 and T2) perform step 1 in parallel. T1 is 
> granted the synchronization lock in (2), and T2 must wait. T1 traverses the 
> linked list, finds the object flagged by T2 and removes it. Further T1 
> releases the synchronization lock and clears the flag on the object it had 
> flagged. This is not the same object that it removed, so when T2 is granted 
> the synchronization lock, there is no object flagged for removal. As a 
> result, only the object T2 attempted to remove was in fact removed. The 
> object that T1 flagged for removal is still in the linked list.

-- 
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