Author: gsim
Date: Mon Aug  6 06:55:08 2007
New Revision: 563136

URL: http://svn.apache.org/viewvc?view=rev&rev=563136
Log:
Channel dispatcher needs ti be joined on destruction.
Also minor cleanup: removed redundant method and friend declarations.


Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.cpp?view=diff&rev=563136&r1=563135&r2=563136
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.cpp Mon Aug  6 
06:55:08 2007
@@ -49,11 +49,14 @@
 }}
 
 Channel::Channel(bool _transactional, u_int16_t _prefetch) :
-    prefetch(_prefetch), transactional(_transactional), errorCode(200), 
errorText("Ok"), running(false)
+    prefetch(_prefetch), transactional(_transactional), running(false)
 {
 }
 
-Channel::~Channel(){}
+Channel::~Channel()
+{
+    join();
+}
 
 void Channel::open(ConnectionImpl::shared_ptr c, SessionCore::shared_ptr s)
 {
@@ -145,15 +148,6 @@
     stop();
 }
 
-// Channel closed by peer.
-void Channel::peerClose(uint16_t code, const std::string& message) {
-    assert(isOpen());
-    //record reason:
-    errorCode = code;
-    errorText = message;
-    stop();
-}
-
 AMQMethodBody::shared_ptr Channel::sendAndReceive(AMQMethodBody::shared_ptr 
toSend, ClassId /*c*/, MethodId /*m*/)
 {
     session->setSync(true);
@@ -254,8 +248,12 @@
 void Channel::stop() {
     session->stop();
     gets.close();
+    join();
+}
+
+void Channel::join() {
     Mutex::ScopedLock l(stopLock);
-    if(running) {
+    if(running && dispatcher.id()) {
         dispatcher.join();
         running = false;
     }

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.h?view=diff&rev=563136&r1=563135&r2=563136
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/ClientChannel.h Mon Aug  6 
06:55:08 2007
@@ -76,9 +76,6 @@
     const bool transactional;
     framing::ProtocolVersion version;
 
-    uint16_t errorCode;
-    std::string errorText;
-
     sys::Mutex stopLock;
     bool running;
 
@@ -120,13 +117,11 @@
 
     void open(ConnectionImpl::shared_ptr, SessionCore::shared_ptr);
     void closeInternal();
-    void peerClose(uint16_t, const std::string&);
+    void join();
 
     // FIXME aconway 2007-02-23: Get rid of friendships.
     friend class Connection;
-    friend class BasicMessageChannel; // for sendAndReceive.
-    friend class MessageMessageChannel; // for sendAndReceive.
-        
+
   public:
     /**
      * Creates a channel object.

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h?view=diff&rev=563136&r1=563135&r2=563136
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h Mon Aug  6 
06:55:08 2007
@@ -59,9 +59,6 @@
     ConnectionImpl::shared_ptr impl;
     bool isOpen;
     bool debug;
-
-    // TODO aconway 2007-01-26: too many friendships, untagle these classes.
-    friend class Channel;
     
   public:
     /**


Reply via email to