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