git-svn-id: svn://db.shs.com.ru/pip@405 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2017-04-19 14:25:35 +00:00
parent ea76fc84f0
commit 01c5327dd2

View File

@@ -445,7 +445,8 @@ bool PIPeer::dataRead(uchar * readed, int size) {
int type, cnt; int type, cnt;
PIString from, to; PIString from, to;
ba >> type; ba >> type;
PIMutexLocker locker(eth_mutex); // PIMutexLocker locker(eth_mutex);
eth_mutex.lock();
piCout << "dataRead lock"; piCout << "dataRead lock";
if (type == 5) { // ping request if (type == 5) { // ping request
PIString addr; PIString addr;
@@ -468,6 +469,7 @@ bool PIPeer::dataRead(uchar * readed, int size) {
} }
} }
} }
eth_mutex.unlock();
return true; return true;
} }
if (type == 6) { // ping request if (type == 6) { // ping request
@@ -489,14 +491,19 @@ bool PIPeer::dataRead(uchar * readed, int size) {
if (a.ping < 0) a.ping = ptime.toMilliseconds(); if (a.ping < 0) a.ping = ptime.toMilliseconds();
else a.ping = 0.6 * a.ping + 0.4 * ptime.toMilliseconds(); else a.ping = 0.6 * a.ping + 0.4 * ptime.toMilliseconds();
// piCout << " ping echo" << p.name << a.address << a.ping; // piCout << " ping echo" << p.name << a.address << a.ping;
eth_mutex.unlock();
return true; return true;
} }
} }
} }
eth_mutex.unlock();
return true; return true;
} }
// piCoutObj << "received data from" << from << "packet" << type; // piCoutObj << "received data from" << from << "packet" << type;
if (type != 4) return true; if (type != 4) {
eth_mutex.unlock();
return true;
}
diag_d.received(size); diag_d.received(size);
ba >> from >> to >> cnt >> pba; ba >> from >> to >> cnt >> pba;
//piCoutObj << "Received packet" << type << from << to << pba.size_s(); //piCoutObj << "Received packet" << type << from << to << pba.size_s();
@@ -508,26 +515,31 @@ bool PIPeer::dataRead(uchar * readed, int size) {
PeerInfo * fp = const_cast<PeerInfo * >(getPeerByName(from)); PeerInfo * fp = const_cast<PeerInfo * >(getPeerByName(from));
if (fp == 0) { if (fp == 0) {
peers_mutex.unlock(); peers_mutex.unlock();
eth_mutex.unlock();
return true; return true;
} }
if (pt == 1) { if (pt == 1) {
peers_mutex.unlock(); peers_mutex.unlock();
eth_mutex.unlock();
dtReceived(from, pba); dtReceived(from, pba);
return true; return true;
} }
if (pt == 2 || pt == 3) { if (pt == 2 || pt == 3) {
peers_mutex.unlock(); peers_mutex.unlock();
eth_mutex.unlock();
if (fp->_data) if (fp->_data)
fp->_data->receivedPacket(pt, pba); fp->_data->receivedPacket(pt, pba);
return true; return true;
} }
peers_mutex.unlock(); peers_mutex.unlock();
eth_mutex.unlock();
return true; return true;
} }
PIMutexLocker plocker(peers_mutex); PIMutexLocker plocker(peers_mutex);
PeerInfo * dp = quickestPeer(to); PeerInfo * dp = quickestPeer(to);
if (dp == 0) { if (dp == 0) {
//piCoutObj << "Can`t find peer \"" << to << "\"!"; //piCoutObj << "Can`t find peer \"" << to << "\"!";
eth_mutex.unlock();
return true; return true;
} }
cnt++; cnt++;
@@ -536,6 +548,7 @@ bool PIPeer::dataRead(uchar * readed, int size) {
//piCout << "translate packet" << from << "->" << to << ", ttl =" << cnt; //piCout << "translate packet" << from << "->" << to << ", ttl =" << cnt;
sendToNeighbour(dp, sba); sendToNeighbour(dp, sba);
} }
eth_mutex.unlock();
return true; return true;
} }