You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Gordon Sim (JIRA)" <qp...@incubator.apache.org> on 2008/08/18 15:41:44 UTC

[jira] Created: (QPID-1250) Race in detaching for 0-10 python client

Race in detaching for 0-10 python client
----------------------------------------

                 Key: QPID-1250
                 URL: https://issues.apache.org/jira/browse/QPID-1250
             Project: Qpid
          Issue Type: Bug
          Components: Python Client
    Affects Versions: M3
            Reporter: Gordon Sim
            Assignee: Gordon Sim
            Priority: Minor
             Fix For: M3


In delegates.py, the session_detach() handler first calls detach on the connection which updates the record of attached sessions with the connections lock held, then sends the session_detached() response to the peer.

If an application creates a new session between the session being removed from the attached set and the detached response being sent, the channel can get reused for the new session and there's a race between the sending of detached (for the old session) and attach (for the new session) on that same channel.

My suggested fix for this is just to send the detached before actually detaching:

Index: qpid/delegates.py
===================================================================
--- qpid/delegates.py   (revision 686688)
+++ qpid/delegates.py   (working copy)
@@ -74,8 +74,8 @@
     notify(ch.session.condition)

   def session_detach(self, ch, d):
+    ch.session_detached(d.name)
     ssn = self.connection.detach(d.name, ch)
-    ch.session_detached(d.name)

   def session_detached(self, ch, d):
     self.connection.detach(d.name, ch) 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (QPID-1250) Race in detaching for 0-10 python client

Posted by "Gordon Sim (JIRA)" <qp...@incubator.apache.org>.
     [ https://issues.apache.org/jira/browse/QPID-1250?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gordon Sim resolved QPID-1250.
------------------------------

    Resolution: Fixed

> Race in detaching for 0-10 python client
> ----------------------------------------
>
>                 Key: QPID-1250
>                 URL: https://issues.apache.org/jira/browse/QPID-1250
>             Project: Qpid
>          Issue Type: Bug
>          Components: Python Client
>    Affects Versions: M3
>            Reporter: Gordon Sim
>            Assignee: Gordon Sim
>            Priority: Minor
>             Fix For: M3
>
>
> In delegates.py, the session_detach() handler first calls detach on the connection which updates the record of attached sessions with the connections lock held, then sends the session_detached() response to the peer.
> If an application creates a new session between the session being removed from the attached set and the detached response being sent, the channel can get reused for the new session and there's a race between the sending of detached (for the old session) and attach (for the new session) on that same channel.
> My suggested fix for this is just to send the detached before actually detaching:
> Index: qpid/delegates.py
> ===================================================================
> --- qpid/delegates.py   (revision 686688)
> +++ qpid/delegates.py   (working copy)
> @@ -74,8 +74,8 @@
>      notify(ch.session.condition)
>    def session_detach(self, ch, d):
> +    ch.session_detached(d.name)
>      ssn = self.connection.detach(d.name, ch)
> -    ch.session_detached(d.name)
>    def session_detached(self, ch, d):
>      self.connection.detach(d.name, ch) 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.