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:
/**