diff --git a/src/io/piconnection.cpp b/src/io/piconnection.cpp index aee9e6de..904dfb2a 100755 --- a/src/io/piconnection.cpp +++ b/src/io/piconnection.cpp @@ -1071,6 +1071,8 @@ void PIConnection::DevicePool::run() { void __DevicePool_threadReadDP(void * ddp) { PIConnection::DevicePool::DeviceData * dd((PIConnection::DevicePool::DeviceData * )ddp); if (dd->dev == 0) {piMSleep(100); return;} + if (dd->dev->isClosed()) + if (!dd->dev->open()) {piMSleep(dd->dev->reopenTimeout()); return;} PIByteArray ba; ba = dd->dev->read(dd->dev->threadedReadBufferSize()); // dd->dev->threadedRead(ba.data(), ba.size()); diff --git a/src/io/pipeer.cpp b/src/io/pipeer.cpp index 41dc66df..2e6d96f9 100755 --- a/src/io/pipeer.cpp +++ b/src/io/pipeer.cpp @@ -141,6 +141,7 @@ PIPeer::PIPeer(const PIString & n): PIIODevice(), diag_d(false), diag_s(false), PIMutexLocker pl(peers_mutex); PIMutexLocker sl(send_mutex); changeName(n); + setReopenTimeout(100); read_buffer_size = 128; self_info.dist = 0; self_info.time = PISystemTime::current(); @@ -191,6 +192,7 @@ void PIPeer::timerEvent(void * data, int delim) { syncPeers(); piMSleep(100); pingNeighbours(); + //piCoutObj << "isOpened" << isOpened(); break; case 5: // every 5 s checkNetwork(); @@ -556,7 +558,8 @@ bool PIPeer::mbcastRead(uchar * data, int size) { pi.resetPing(); addPeer(pi); buildMap(); - //piCoutObj << "new peer \"" << pi.name << "\"" << " dist " << pi.dist; +// piCoutObj << "new peer \"" << pi.name << "\"" << " dist " << pi.dist; +// piCoutObj << mode() << opened_; pi.dist++; sendSelfInfo(); sendPeerInfo(pi); @@ -804,6 +807,7 @@ bool PIPeer::openDevice() { reinit(); diag_d.reset(); diag_s.reset(); + //piCoutObj << "open..."; PIMutexLocker ml(peers_mutex); if (trust_peer.isEmpty()) return !peers.isEmpty(); @@ -898,7 +902,7 @@ void PIPeer::changeName(const PIString &new_name) { PIString PIPeer::constructFullPath() const { PIString ret(fullPathPrefix() + "://"); - ret << name() << ":" << trustPeerName(); + ret << self_info.name << ":" << trustPeerName(); return ret; }