git-svn-id: svn://db.shs.com.ru/pip@235 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2016-08-22 04:57:03 +00:00
parent 3642ea511a
commit 7b227f15ac
2 changed files with 18 additions and 6 deletions

View File

@@ -145,7 +145,7 @@ PIPeer::PIPeer(const PIString & n): PIIODevice() {
CONNECTU(&timer, tickEvent, this, timerEvent); CONNECTU(&timer, tickEvent, this, timerEvent);
prev_ifaces = PIEthernet::interfaces(); prev_ifaces = PIEthernet::interfaces();
no_timer = false; no_timer = false;
initNetwork(); // initNetwork();
sendSelfInfo(); sendSelfInfo();
timer.addDelimiter(5); timer.addDelimiter(5);
timer.start(1000); timer.start(1000);
@@ -759,6 +759,7 @@ void PIPeer::pingNeighbours() {
bool PIPeer::openDevice() { bool PIPeer::openDevice() {
reinit();
PIMutexLocker ml(peers_mutex); PIMutexLocker ml(peers_mutex);
if (trust_peer.isEmpty()) if (trust_peer.isEmpty())
return !peers.isEmpty(); return !peers.isEmpty();
@@ -858,14 +859,24 @@ PIString PIPeer::constructFullPath() const {
int PIPeer::read(void *read_to, int max_size) { int PIPeer::read(void *read_to, int max_size) {
while (read_buffer.isEmpty()) piMSleep(10); read_buffer_mutex.lock();
PIMutexLocker ml(read_buffer_mutex); 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()) { if (!read_buffer.isEmpty()) {
PIByteArray ba = read_buffer.dequeue(); PIByteArray ba = read_buffer.dequeue();
read_buffer_mutex.unlock();
int sz = piMini(ba.size_s(), max_size); int sz = piMini(ba.size_s(), max_size);
memcpy(read_to, ba.data(), sz); memcpy(read_to, ba.data(), sz);
return sz; return sz;
} }
read_buffer_mutex.unlock();
return 0; return 0;
} }

View File

@@ -249,6 +249,7 @@ Daemon::Daemon(): inited__(false), PIPeer(pisd_prefix + PISystemInfo::instance()
tile_root->addTile(tile_fm); tile_root->addTile(tile_fm);
CONNECTU(&screen, tileEvent, this, tileEvent) CONNECTU(&screen, tileEvent, this, tileEvent)
reinit();
inited__ = true; inited__ = true;
} }