Release the master lock sooner.

This commit is contained in:
JoelKatz
2013-05-23 11:32:14 -07:00
parent c3d1951c56
commit 68c8162a87
2 changed files with 13 additions and 11 deletions

View File

@@ -512,7 +512,7 @@ void Peer::processReadBuffer()
ripple::TMGetPeers msg; ripple::TMGetPeers msg;
if (msg.ParseFromArray(&mReadbuf[HEADER_SIZE], mReadbuf.size() - HEADER_SIZE)) if (msg.ParseFromArray(&mReadbuf[HEADER_SIZE], mReadbuf.size() - HEADER_SIZE))
recvGetPeers(msg); recvGetPeers(msg, sl);
else else
cLog(lsWARNING) << "parse error: " << type; cLog(lsWARNING) << "parse error: " << type;
} }
@@ -568,7 +568,7 @@ void Peer::processReadBuffer()
event->reName("Peer::transaction"); event->reName("Peer::transaction");
ripple::TMTransaction msg; ripple::TMTransaction msg;
if (msg.ParseFromArray(&mReadbuf[HEADER_SIZE], mReadbuf.size() - HEADER_SIZE)) if (msg.ParseFromArray(&mReadbuf[HEADER_SIZE], mReadbuf.size() - HEADER_SIZE))
recvTransaction(msg); recvTransaction(msg, sl);
else else
cLog(lsWARNING) << "parse error: " << type; cLog(lsWARNING) << "parse error: " << type;
} }
@@ -634,7 +634,7 @@ void Peer::processReadBuffer()
event->reName("Peer::validation"); event->reName("Peer::validation");
boost::shared_ptr<ripple::TMValidation> msg = boost::make_shared<ripple::TMValidation>(); boost::shared_ptr<ripple::TMValidation> msg = boost::make_shared<ripple::TMValidation>();
if (msg->ParseFromArray(&mReadbuf[HEADER_SIZE], mReadbuf.size() - HEADER_SIZE)) if (msg->ParseFromArray(&mReadbuf[HEADER_SIZE], mReadbuf.size() - HEADER_SIZE))
recvValidation(msg); recvValidation(msg, sl);
else else
cLog(lsWARNING) << "parse error: " << type; cLog(lsWARNING) << "parse error: " << type;
} }
@@ -864,15 +864,15 @@ static void checkTransaction(Job&, int flags, SerializedTransaction::pointer stx
#endif #endif
} }
void Peer::recvTransaction(ripple::TMTransaction& packet) void Peer::recvTransaction(ripple::TMTransaction& packet, ScopedLock& MasterLockHolder)
{ {
MasterLockHolder.unlock();
Transaction::pointer tx; Transaction::pointer tx;
#ifndef TRUST_NETWORK #ifndef TRUST_NETWORK
try try
{ {
#endif #endif
std::string rawTx = packet.rawtransaction(); Serializer s(packet.rawtransaction());
Serializer s(rawTx);
SerializerIterator sit(s); SerializerIterator sit(s);
SerializedTransaction::pointer stx = boost::make_shared<SerializedTransaction>(boost::ref(sit)); SerializedTransaction::pointer stx = boost::make_shared<SerializedTransaction>(boost::ref(sit));
@@ -1084,8 +1084,9 @@ static void checkValidation(Job&, SerializedValidation::pointer val, uint256 sig
#endif #endif
} }
void Peer::recvValidation(const boost::shared_ptr<ripple::TMValidation>& packet) void Peer::recvValidation(const boost::shared_ptr<ripple::TMValidation>& packet, ScopedLock& MasterLockHolder)
{ {
MasterLockHolder.unlock();
if (packet->validation().size() < 50) if (packet->validation().size() < 50)
{ {
cLog(lsWARNING) << "Too small validation from peer"; cLog(lsWARNING) << "Too small validation from peer";
@@ -1137,8 +1138,9 @@ void Peer::recvGetContacts(ripple::TMGetContacts& packet)
// Return a list of your favorite people // Return a list of your favorite people
// TODO: filter out all the LAN peers // TODO: filter out all the LAN peers
// TODO: filter out the peer you are talking to // TODO: filter out the peer you are talking to
void Peer::recvGetPeers(ripple::TMGetPeers& packet) void Peer::recvGetPeers(ripple::TMGetPeers& packet, ScopedLock& MasterLockHolder)
{ {
MasterLockHolder.unlock();
std::vector<std::string> addrs; std::vector<std::string> addrs;
theApp->getConnectionPool().getTopNAddrs(30, addrs); theApp->getConnectionPool().getTopNAddrs(30, addrs);

View File

@@ -87,12 +87,12 @@ protected:
void sendHello(); void sendHello();
void recvHello(ripple::TMHello& packet); void recvHello(ripple::TMHello& packet);
void recvTransaction(ripple::TMTransaction& packet); void recvTransaction(ripple::TMTransaction& packet, ScopedLock& MasterLockHolder);
void recvValidation(const boost::shared_ptr<ripple::TMValidation>& packet); void recvValidation(const boost::shared_ptr<ripple::TMValidation>& packet, ScopedLock& MasterLockHolder);
void recvGetValidation(ripple::TMGetValidations& packet); void recvGetValidation(ripple::TMGetValidations& packet);
void recvContact(ripple::TMContact& packet); void recvContact(ripple::TMContact& packet);
void recvGetContacts(ripple::TMGetContacts& packet); void recvGetContacts(ripple::TMGetContacts& packet);
void recvGetPeers(ripple::TMGetPeers& packet); void recvGetPeers(ripple::TMGetPeers& packet, ScopedLock& MasterLockHolder);
void recvPeers(ripple::TMPeers& packet); void recvPeers(ripple::TMPeers& packet);
void recvGetObjectByHash(const boost::shared_ptr<ripple::TMGetObjectByHash>& packet); void recvGetObjectByHash(const boost::shared_ptr<ripple::TMGetObjectByHash>& packet);
void recvPing(ripple::TMPing& packet); void recvPing(ripple::TMPing& packet);