diff --git a/notes.txt b/notes.txt index f072ef08..fb78175c 100644 --- a/notes.txt +++ b/notes.txt @@ -1,6 +1,5 @@ *TODO: -Server ping client? --Server: OnResync while terminating?!? -LastSeen: relative time [s] or [ms]? -Android crash: Empty latency => app restart => empty client list -Segfault when ^c on OpenWrt with client connected diff --git a/server/streamreader/fileStream.cpp b/server/streamreader/fileStream.cpp index 4035cf76..b084cd6b 100644 --- a/server/streamreader/fileStream.cpp +++ b/server/streamreader/fileStream.cpp @@ -104,7 +104,7 @@ void FileStream::worker() } catch(const std::exception& e) { - logE << "Exception: " << e.what() << std::endl; + logE << "(FileStream) Exception: " << e.what() << std::endl; } } } diff --git a/server/streamreader/pcmStream.cpp b/server/streamreader/pcmStream.cpp index 2bfe6c60..cccf1297 100644 --- a/server/streamreader/pcmStream.cpp +++ b/server/streamreader/pcmStream.cpp @@ -98,7 +98,8 @@ void PcmStream::stop() if (active_) { active_ = false; - readerThread_.join(); + if (readerThread_.joinable()) + readerThread_.join(); } } diff --git a/server/streamreader/pipeStream.cpp b/server/streamreader/pipeStream.cpp index 4dbb3c9f..81e8b69d 100644 --- a/server/streamreader/pipeStream.cpp +++ b/server/streamreader/pipeStream.cpp @@ -97,6 +97,9 @@ void PipeStream::worker() } while ((len < toRead) && active_); + if (!active_) + break; + encoder_->encode(chunk.get()); nextTick += pcmReadMs_; chronos::addUs(tvChunk, pcmReadMs_ * 1000); @@ -118,7 +121,7 @@ void PipeStream::worker() } catch(const std::exception& e) { - logE << "Exception: " << e.what() << std::endl; + logE << "(PipeStream) Exception: " << e.what() << std::endl; chronos::sleep(100); } } diff --git a/server/streamreader/processStream.cpp b/server/streamreader/processStream.cpp index 02466e96..b4a5856b 100644 --- a/server/streamreader/processStream.cpp +++ b/server/streamreader/processStream.cpp @@ -113,7 +113,10 @@ void ProcessStream::stop() if (process_) process_->kill(); 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_); + if (!active_) + break; + encoder_->encode(chunk.get()); nextTick += pcmReadMs_; chronos::addUs(tvChunk, pcmReadMs_ * 1000); @@ -202,7 +208,7 @@ void ProcessStream::worker() } catch(const std::exception& e) { - logE << "Exception: " << e.what() << std::endl; + logE << "(ProcessStream) Exception: " << e.what() << std::endl; process_->kill(); int sleepMs = 30000; while (active_ && (sleepMs > 0))