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