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

Emmanuel Lecharny resolved DIRMINA-994.
---------------------------------------
    Resolution: Fixed

Fixed with http://git-wip-us.apache.org/repos/asf/mina/commit/f1972fc3

We now check the cancel() method return before adding the future to the list of 
cancelled ones.

> The ConnectionRequest.cancel() method is inconsistent wrt concurrent access
> ---------------------------------------------------------------------------
>
>                 Key: DIRMINA-994
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-994
>             Project: MINA
>          Issue Type: Bug
>    Affects Versions: 2.0.9
>            Reporter: Emmanuel Lecharny
>            Priority: Critical
>             Fix For: 2.0.10
>
>
> When we call the ConnectionRequest.cancel() method, it does :
> {code}
>         public void cancel() {
>             if (!isDone()) {
>                 super.cancel();
>                 cancelQueue.add(this);
>                 startupWorker();
>                 wakeup();
>             }
> {code}
> The problem is that the isDone() method is  :
> {code}
>     public boolean isDone() {
>         synchronized (lock) {
>             return ready;
>         }
>     }
> {code}
> and the super.cancel() method is :
> {code}
>     public void cancel() {
>         setValue(CANCELED);
>     }
> {code}
> with the setValue() method :
> {code}
>     public void setValue(Object newValue) {
>         synchronized (lock) {
>             // Allowed only once.
>             if (ready) {
>                 return;
>             }
>             result = newValue;
>             ready = true;
>             ...
> {code}
> At this point, we may have the 'ready' flag set to false, enter into the 
> super.cancel() method, and have the 'ready' flag set to true when we check it 
> again, but still we will add the current connectRequest into the cancel 
> queue, when we should not.  



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

Reply via email to