From 7b227f15ac7e01619873ebcbbed36069cdb87e34 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: Mon, 22 Aug 2016 04:57:03 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@235 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src/io/pipeer.cpp | 23 +++++++++++++++++------ utils/system_daemon/daemon.cpp | 1 + 2 files changed, 18 insertions(+), 6 deletions(-) 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; }