diff --git a/src/io/pipeer.cpp b/src/io/pipeer.cpp index 6f0e000c..8c81e002 100755 --- a/src/io/pipeer.cpp +++ b/src/io/pipeer.cpp @@ -145,7 +145,7 @@ PIPeer::PIPeer(const PIString & n): PIIODevice() { CONNECTU(&timer, tickEvent, this, timerEvent); prev_ifaces = PIEthernet::interfaces(); no_timer = false; - initNetwork(); +// initNetwork(); sendSelfInfo(); timer.addDelimiter(5); timer.start(1000); @@ -759,6 +759,7 @@ void PIPeer::pingNeighbours() { bool PIPeer::openDevice() { + reinit(); PIMutexLocker ml(peers_mutex); if (trust_peer.isEmpty()) return !peers.isEmpty(); @@ -840,7 +841,7 @@ void PIPeer::reinit() { } -void PIPeer::changeName(const PIString & new_name) { +void PIPeer::changeName(const PIString &new_name) { PIString name_ = new_name; if (name_.isEmpty()) name_ = "rnd_" + PIString::fromNumber(random() % 1000); setName(name_); @@ -857,20 +858,30 @@ PIString PIPeer::constructFullPath() const { } -int PIPeer::read(void * read_to, int max_size) { - while (read_buffer.isEmpty()) piMSleep(10); - PIMutexLocker ml(read_buffer_mutex); +int PIPeer::read(void *read_to, int max_size) { + read_buffer_mutex.lock(); + bool empty = read_buffer.isEmpty(); + read_buffer_mutex.unlock(); + while (empty) { + read_buffer_mutex.lock(); + empty = read_buffer.isEmpty(); + read_buffer_mutex.unlock(); + piMSleep(10); + } + read_buffer_mutex.lock(); if (!read_buffer.isEmpty()) { PIByteArray ba = read_buffer.dequeue(); + read_buffer_mutex.unlock(); int sz = piMini(ba.size_s(), max_size); memcpy(read_to, ba.data(), sz); return sz; } + read_buffer_mutex.unlock(); return 0; } -int PIPeer::write(const void * data, int size) { +int PIPeer::write(const void *data, int size) { if (trust_peer.isEmpty()) { sendToAll(data, size); return size; diff --git a/utils/system_daemon/daemon.cpp b/utils/system_daemon/daemon.cpp index cfd973ed..bbeb8afc 100644 --- a/utils/system_daemon/daemon.cpp +++ b/utils/system_daemon/daemon.cpp @@ -249,6 +249,7 @@ Daemon::Daemon(): inited__(false), PIPeer(pisd_prefix + PISystemInfo::instance() tile_root->addTile(tile_fm); CONNECTU(&screen, tileEvent, this, tileEvent) + reinit(); inited__ = true; }