From 01c5327dd25e3eb6a7770fcefef1e19d32c3d29c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Wed, 19 Apr 2017 14:25:35 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@405 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src_main/io/pipeer.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) 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; }