1
0
mirror of https://github.com/GOSTSec/poolserver synced 2025-01-28 07:24:16 +00:00

Thread synchronisation for io operations

This commit is contained in:
Intel 2014-05-05 10:23:55 -04:00
parent c06c4edb2a
commit 43c05ff10e

View File

@ -27,7 +27,7 @@ namespace Stratum
class Client : public boost::enable_shared_from_this<Client> class Client : public boost::enable_shared_from_this<Client>
{ {
public: public:
Client(Server* server, asio::io_service& io_service, uint64 id) : _server(server), _socket(io_service), _id(id), _subscribed(false), _jobid(0), _shareLimiter(this) Client(Server* server, asio::io_service& io_service, uint64 id) : _server(server), _socket(io_service), _ioStrand(io_service), _id(id), _subscribed(false), _jobid(0), _shareLimiter(this)
{ {
_diff = sConfig.Get<uint32>("StratumMinDifficulty"); _diff = sConfig.Get<uint32>("StratumMinDifficulty");
_minDiff = _diff; _minDiff = _diff;
@ -49,7 +49,7 @@ namespace Stratum
_socket, _socket,
_recvBuffer, _recvBuffer,
asio::transfer_at_least(1), asio::transfer_at_least(1),
boost::bind(&Client::_OnReceive, this, asio::placeholders::error, asio::placeholders::bytes_transferred)); _ioStrand.wrap(boost::bind(&Client::_OnReceive, this, asio::placeholders::error, asio::placeholders::bytes_transferred)));
} }
void SendJob(bool clean); void SendJob(bool clean);
@ -62,7 +62,7 @@ namespace Stratum
boost::asio::async_write( boost::asio::async_write(
_socket, _socket,
boost::asio::buffer(data.c_str(), data.length()), boost::asio::buffer(data.c_str(), data.length()),
boost::bind(&Client::_OnSend, this, boost::asio::placeholders::error)); _ioStrand.wrap(boost::bind(&Client::_OnSend, this, boost::asio::placeholders::error)));
} }
void OnMiningSubmit(JSON msg); void OnMiningSubmit(JSON msg);
@ -138,6 +138,7 @@ namespace Stratum
asio::streambuf _recvBuffer; asio::streambuf _recvBuffer;
std::string _recvMessage; std::string _recvMessage;
tcp::socket _socket; tcp::socket _socket;
asio::strand _ioStrand;
uint32 _ip; uint32 _ip;
uint64 _id; uint64 _id;