fixed exception during server shutdown

This commit is contained in:
badaix 2016-11-06 13:15:19 +01:00
parent 748c4c06b1
commit 7353383313
5 changed files with 15 additions and 6 deletions

View file

@ -1,6 +1,5 @@
*TODO: *TODO:
-Server ping client? -Server ping client?
-Server: OnResync while terminating?!?
-LastSeen: relative time [s] or [ms]? -LastSeen: relative time [s] or [ms]?
-Android crash: Empty latency => app restart => empty client list -Android crash: Empty latency => app restart => empty client list
-Segfault when ^c on OpenWrt with client connected -Segfault when ^c on OpenWrt with client connected

View file

@ -104,7 +104,7 @@ void FileStream::worker()
} }
catch(const std::exception& e) catch(const std::exception& e)
{ {
logE << "Exception: " << e.what() << std::endl; logE << "(FileStream) Exception: " << e.what() << std::endl;
} }
} }
} }

View file

@ -98,7 +98,8 @@ void PcmStream::stop()
if (active_) if (active_)
{ {
active_ = false; active_ = false;
readerThread_.join(); if (readerThread_.joinable())
readerThread_.join();
} }
} }

View file

@ -97,6 +97,9 @@ void PipeStream::worker()
} }
while ((len < toRead) && active_); while ((len < toRead) && active_);
if (!active_)
break;
encoder_->encode(chunk.get()); encoder_->encode(chunk.get());
nextTick += pcmReadMs_; nextTick += pcmReadMs_;
chronos::addUs(tvChunk, pcmReadMs_ * 1000); chronos::addUs(tvChunk, pcmReadMs_ * 1000);
@ -118,7 +121,7 @@ void PipeStream::worker()
} }
catch(const std::exception& e) catch(const std::exception& e)
{ {
logE << "Exception: " << e.what() << std::endl; logE << "(PipeStream) Exception: " << e.what() << std::endl;
chronos::sleep(100); chronos::sleep(100);
} }
} }

View file

@ -113,7 +113,10 @@ void ProcessStream::stop()
if (process_) if (process_)
process_->kill(); process_->kill();
PcmStream::stop(); PcmStream::stop();
stderrReaderThread_.join();
/// thread is detached, so it is not joinable
if (stderrReaderThread_.joinable())
stderrReaderThread_.join();
} }
@ -181,6 +184,9 @@ void ProcessStream::worker()
} }
while ((len < toRead) && active_); while ((len < toRead) && active_);
if (!active_)
break;
encoder_->encode(chunk.get()); encoder_->encode(chunk.get());
nextTick += pcmReadMs_; nextTick += pcmReadMs_;
chronos::addUs(tvChunk, pcmReadMs_ * 1000); chronos::addUs(tvChunk, pcmReadMs_ * 1000);
@ -202,7 +208,7 @@ void ProcessStream::worker()
} }
catch(const std::exception& e) catch(const std::exception& e)
{ {
logE << "Exception: " << e.what() << std::endl; logE << "(ProcessStream) Exception: " << e.what() << std::endl;
process_->kill(); process_->kill();
int sleepMs = 30000; int sleepMs = 30000;
while (active_ && (sleepMs > 0)) while (active_ && (sleepMs > 0))