You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2008/11/06 19:24:22 UTC

svn commit: r711931 - in /incubator/qpid/trunk/qpid/cpp/src/qpid: amqp_0_10/SessionHandler.cpp amqp_0_10/SessionHandler.h broker/SessionHandler.cpp broker/SessionHandler.h broker/SessionState.cpp broker/SessionState.h

Author: gsim
Date: Thu Nov  6 10:24:17 2008
New Revision: 711931

URL: http://svn.apache.org/viewvc?rev=711931&view=rev
Log:
QPID-1413: disable output before sending detach


Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp?rev=711931&r1=711930&r2=711931&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp Thu Nov  6 10:24:17 2008
@@ -88,6 +88,7 @@
         SequenceNumber commandId;
         if (getState()) commandId =  getState()->receiverGetCurrent();
         execution.exception(e.code, commandId, m ? m->amqpClassId() : 0, m ? m->amqpMethodId() : 0, 0, e.what(), FieldTable());
+        detaching();
         sendDetach();
     }
     catch(const ChannelException& e){

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h?rev=711931&r1=711930&r2=711931&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h Thu Nov  6 10:24:17 2008
@@ -87,7 +87,7 @@
     virtual void setState(const std::string& sessionName, bool force) = 0;
     virtual void channelException(uint16_t code, const std::string& msg) = 0;
     virtual void connectionException(uint16_t code, const std::string& msg) = 0;
-
+    virtual void detaching() = 0;
 
     // Notification of events
     virtual void readyToSend() {}

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.cpp?rev=711931&r1=711930&r2=711931&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.cpp Thu Nov  6 10:24:17 2008
@@ -71,6 +71,12 @@
     session = connection.broker.getSessionManager().attach(*this, id, force);
 }
 
+void SessionHandler::detaching() 
+{
+    assert(session.get());
+    session->disableOutput();
+}
+
 FrameHandler* SessionHandler::getInHandler() { return session.get() ? &session->in : 0; }
 qpid::SessionState* SessionHandler::getState() { return session.get(); }
 

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.h?rev=711931&r1=711930&r2=711931&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandler.h Thu Nov  6 10:24:17 2008
@@ -65,6 +65,7 @@
     virtual framing::FrameHandler* getInHandler();
     virtual void channelException(uint16_t code, const std::string& msg);
     virtual void connectionException(uint16_t code, const std::string& msg);
+    virtual void detaching();
     virtual void readyToSend();
 
   private:

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.cpp?rev=711931&r1=711930&r2=711931&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.cpp Thu Nov  6 10:24:17 2008
@@ -93,13 +93,18 @@
 
 void SessionState::detach() {
     QPID_LOG(debug, getId() << ": detached on broker.");
-    semanticState.detached();//prevents further activateOutput calls until reattached
-    getConnection().outputTasks.removeOutputTask(&semanticState);
+    disableOutput();
     handler = 0;
     if (mgmtObject != 0)
         mgmtObject->set_attached  (0);
 }
 
+void SessionState::disableOutput() 
+{
+    semanticState.detached();//prevents further activateOutput calls until reattached
+    getConnection().outputTasks.removeOutputTask(&semanticState);
+}
+
 void SessionState::attach(SessionHandler& h) {
     QPID_LOG(debug, getId() << ": attached on broker.");
     handler = &h;

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.h?rev=711931&r1=711930&r2=711931&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionState.h Thu Nov  6 10:24:17 2008
@@ -73,6 +73,7 @@
 
     void detach();
     void attach(SessionHandler& handler);
+    void disableOutput();
 
     /** @pre isAttached() */
     framing::AMQP_ClientProxy& getProxy();