mirror of
https://github.com/XRPLF/rippled.git
synced 2026-04-29 15:37:57 +00:00
fixes some concurrency bugs
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user