Unverified Commit 1e8b1ddf authored by Dennis Jenkins's avatar Dennis Jenkins Committed by GitHub

Merge pull request #684 from hyperxor/remove_friend_relationship_in_connection

Remove friend relationship in Connection class
parents 54e2bc98 9ed23474
......@@ -27,13 +27,10 @@
namespace Pistache {
namespace Http {
class ConnectionPool;
class Transport;
struct Connection : public std::enable_shared_from_this<Connection> {
friend class ConnectionPool;
using OnDone = std::function<void()>;
Connection();
......@@ -58,6 +55,8 @@ struct Connection : public std::enable_shared_from_this<Connection> {
void connect(const Address &addr);
void close();
bool isIdle() const;
bool tryUse();
void setAsIdle();
bool isConnected() const;
bool hasTransport() const;
void associateTransport(const std::shared_ptr<Transport> &transport);
......
......@@ -425,6 +425,16 @@ bool Connection::isIdle() const {
Connection::State::Idle;
}
bool Connection::tryUse() {
auto curState = static_cast<uint32_t>(Connection::State::Idle);
auto newState = static_cast<uint32_t>(Connection::State::Used);
return state_.compare_exchange_strong(curState, newState);
}
void Connection::setAsIdle() {
state_.store(static_cast<uint32_t>(Connection::State::Idle));
}
bool Connection::isConnected() const {
return connectionState_.load() == Connected;
}
......@@ -583,10 +593,7 @@ ConnectionPool::pickConnection(const std::string &domain) {
}
for (auto &conn : pool) {
auto &state = conn->state_;
auto curState = static_cast<uint32_t>(Connection::State::Idle);
auto newState = static_cast<uint32_t>(Connection::State::Used);
if (state.compare_exchange_strong(curState, newState)) {
if (conn->tryUse()) {
return conn;
}
}
......@@ -596,7 +603,7 @@ ConnectionPool::pickConnection(const std::string &domain) {
void ConnectionPool::releaseConnection(
const std::shared_ptr<Connection> &connection) {
connection->state_.store(static_cast<uint32_t>(Connection::State::Idle));
connection->setAsIdle();
}
size_t ConnectionPool::usedConnections(const std::string &domain) const {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment