db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (DERBY-3909) Race condition in NetXAResource.removeXaresFromSameRMchain()
Date Thu, 16 Oct 2008 12:12:44 GMT

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

Knut Anders Hatlen resolved DERBY-3909.
---------------------------------------

       Resolution: Fixed
    Fix Version/s: 10.4.2.1
                   10.3.3.1
                   10.2.2.1

Committed to 10.4 with revision 705218.
Committed to 10.3 with revision 705219.
Committed to 10.2 with revision 705220.

Marking the issue as resolved since the problematic code has been removed.

> 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.2.2.0, 10.5.0.0
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>             Fix For: 10.2.2.1, 10.3.3.1, 10.4.2.1, 10.5.0.0
>
>         Attachments: d3909-remove.diff, 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.


Mime
View raw message