diff options
author | Alan Conway <aconway@apache.org> | 2007-12-07 19:13:09 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-12-07 19:13:09 +0000 |
commit | 7bc8f20e59e8f18926119a4bc5fdb5be262c500c (patch) | |
tree | 5112c5428872273dd26092cb5c8bdc3af3beb00e /cpp/src/qpid/client/CompletionTracker.cpp | |
parent | 237c3437a5a4b68c483af77c5d1346104ca404a0 (diff) | |
download | qpid-python-7bc8f20e59e8f18926119a4bc5fdb5be262c500c.tar.gz |
Summary:
- Replaced InProcessBroker with BrokerFixture, uses a full loopback
broker for more realistic tests.
- Extracted non-generated parts of Session_0_10 into SessionBase.
- Sundry small fixes.
src/tests/BrokerFixture.h
- in process broker with loopback connections.
- tests can force a disorderly disconnect.
src/qpid/client/Connector.h
- back door to private members for BrokerFixture.
- close() in destructor to avoid leaks.
src/qpid/client/ConnectionImpl.h,cpp:
- close() in destructor, to fix hang when destroyed without being closed.
src/qpid/client/CompletionTracker.h,.cpp:
- Fixed race in close/add.
src/qpid/client/SessionBase.h,cpp:
- Extracted all non-generated code from Session_0_10 into SessionBase
- Added sync()
src/tests/exception_test.cpp: Converted to boost & BrokerFixture
src/tests/ClientChannelTest.cpp, ClientSessionTest.cpp: Use BrokerFixture
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@602182 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/client/CompletionTracker.cpp')
-rw-r--r-- | cpp/src/qpid/client/CompletionTracker.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/cpp/src/qpid/client/CompletionTracker.cpp b/cpp/src/qpid/client/CompletionTracker.cpp index 46a7384ac2..4c6e59f1b8 100644 --- a/cpp/src/qpid/client/CompletionTracker.cpp +++ b/cpp/src/qpid/client/CompletionTracker.cpp @@ -31,12 +31,13 @@ namespace const std::string empty; } -CompletionTracker::CompletionTracker() {} +CompletionTracker::CompletionTracker() : closed(false) {} CompletionTracker::CompletionTracker(const SequenceNumber& m) : mark(m) {} void CompletionTracker::close() { sys::Mutex::ScopedLock l(lock); + closed=true; while (!listeners.empty()) { Record r(listeners.front()); { @@ -47,17 +48,18 @@ void CompletionTracker::close() } } + void CompletionTracker::completed(const SequenceNumber& _mark) { sys::Mutex::ScopedLock l(lock); mark = _mark; while (!listeners.empty() && !(listeners.front().id > mark)) { Record r(listeners.front()); + listeners.pop_front(); { sys::Mutex::ScopedUnlock u(lock); r.completed(); } - listeners.pop_front(); } } @@ -88,14 +90,13 @@ void CompletionTracker::listenForResult(const SequenceNumber& point, ResultListe bool CompletionTracker::add(const Record& record) { sys::Mutex::ScopedLock l(lock); - if (record.id < mark) { + if (record.id < mark || closed) { return false; } else { //insert at the correct position Listeners::iterator i = seek(record.id); if (i == listeners.end()) i = listeners.begin(); listeners.insert(i, record); - return true; } } |