diff --git a/src_main/io/pipeer.cpp b/src_main/io/pipeer.cpp index dc8164a3..751ac307 100755 --- a/src_main/io/pipeer.cpp +++ b/src_main/io/pipeer.cpp @@ -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(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; }