From 94b4870d94c544a879126f603b2710dcd0b80d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Tue, 17 Mar 2015 13:41:51 +0000 Subject: [PATCH] peer deadlock git-svn-id: svn://db.shs.com.ru/pip@37 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src/io/pipeer.cpp | 14 ++++++++++---- src/io/pipeer.h | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/io/pipeer.cpp b/src/io/pipeer.cpp index a26c2024..f93971c0 100755 --- a/src/io/pipeer.cpp +++ b/src/io/pipeer.cpp @@ -400,11 +400,14 @@ bool PIPeer::mbcastRead(uchar * data, int size) { pi.dist++; sendSelfInfo(); sendPeerInfo(pi); - peerConnected(pi.name); - peerConnectedEvent(pi.name); + ch = true; //piCout << "new peer packet ok"; } peers_mutex.unlock(); + if (ch) { + peerConnected(pi.name); + peerConnectedEvent(pi.name); + } break; case 2: // remove peer //piCout << "remove peer packet ..." << pi.name; @@ -420,11 +423,14 @@ bool PIPeer::mbcastRead(uchar * data, int size) { self_info.removeNeighbour(pi.name); sendPeerRemove(pi.name); buildMap(); - peerDisconnected(pi.name); - peerDisconnectedEvent(pi.name); + ch = true; //piCout << "remove peer packet ok"; } peers_mutex.unlock(); + if (ch) { + peerDisconnected(pi.name); + peerDisconnectedEvent(pi.name); + } break; case 3: // sync peers //piCout << "sync packet ..."; diff --git a/src/io/pipeer.h b/src/io/pipeer.h index 9e4db102..90c17a9e 100755 --- a/src/io/pipeer.h +++ b/src/io/pipeer.h @@ -117,8 +117,8 @@ public: const PeerInfo & selfInfo() const {return self_info;} const PIMap > & _peerMap() const {return addresses_map;} - void lock() {mc_mutex.lock(); peers_mutex.lock();} - void unlock() {mc_mutex.unlock(); peers_mutex.unlock();} + void lock() {peers_mutex.lock();} + void unlock() {peers_mutex.unlock();} EVENT2(dataReceivedEvent, const PIString &, from, const PIByteArray &, data); EVENT1(peerConnectedEvent, const PIString &, name);