fixes some concurrency bugs

This commit is contained in:
Peter Thorson
2012-03-11 13:19:53 -05:00
parent a76e662192
commit cfc491ffce
2 changed files with 28 additions and 3 deletions

View File

@@ -93,9 +93,10 @@ struct request {
class request_coordinator {
public:
void add_request(const request& r) {
boost::unique_lock<boost::mutex> lock(m_lock);
m_requests.push(r);
lock.unlock();
{
boost::unique_lock<boost::mutex> lock(m_lock);
m_requests.push(r);
}
m_cond.notify_one();
}
@@ -163,6 +164,10 @@ public:
void on_fail(connection_ptr con) {
std::cout << "A command connection failed." << std::endl;
}
void on_close(connection_ptr con) {
std::cout << "A command connection closed." << std::endl;
}
private:
request_coordinator& m_coordinator;
std::string m_ident;

View File

@@ -138,6 +138,11 @@ public:
// Valid for OPEN state
/// convenience overload for sending a one off text message.
void send(const std::string& payload, frame::opcode::value op = frame::opcode::TEXT) {
// TODO: do we need a lock?
if (m_state != session::state::OPEN) {
return;
}
websocketpp::message::data::ptr msg = get_control_message2();
if (!msg) {
@@ -152,6 +157,11 @@ public:
send(msg);
}
void send(message::data_ptr msg) {
// TODO: do we need a lock?
if (m_state != session::state::OPEN) {
return;
}
m_processor->prepare_frame(msg);
write_message(msg);
}
@@ -165,9 +175,19 @@ public:
}
}
void ping(const std::string& payload) {
// TODO: do we need a lock?
if (m_state != session::state::OPEN) {
return;
}
send_ping(payload);
}
void pong(const std::string& payload) {
// TODO: do we need a lock?
if (m_state != session::state::OPEN) {
return;
}
send_pong(payload);
}