From 9cdf8d92a1ab6e7dcfde837706e4688bc46b1148 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Tue, 23 Jul 2013 15:52:34 +0200 Subject: [PATCH] Fixed a bug. (DTSC lib mistakenly wiped metadata when seeking backwards, re-re-fixed proc child signal problems) --- lib/dtsc.cpp | 6 +++--- lib/procs.cpp | 14 +++----------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/lib/dtsc.cpp b/lib/dtsc.cpp index 80059206..02995228 100644 --- a/lib/dtsc.cpp +++ b/lib/dtsc.cpp @@ -193,7 +193,7 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){ livePos newPos; newPos.trackID = newPack["trackid"].asInt(); newPos.seekTime = newPack["time"].asInt(); - if (buffers.size() > 0){ + if (buffercount > 1 && buffers.size() > 0){ livePos lastPos = buffers.rbegin()->first; if (newPos < lastPos){ if ((lastPos.seekTime > 1000) && newPos.seekTime < lastPos.seekTime - 1000){ @@ -314,11 +314,11 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){ } while (buffers.size() > buffercount){ - if (keyframes[buffers.begin()->first.trackID].count(buffers.begin()->first)){ + if (buffercount > 1 && keyframes[buffers.begin()->first.trackID].count(buffers.begin()->first)){ updateMeta = true; //if there are < 3 keyframes, throwing one away would mean less than 2 left. if (keyframes[buffers.begin()->first.trackID].size() < 3){ - std::cout << "Warning - track " << buffers.begin()->first.trackID << " doesn't have enough keyframes to be reliably served." << std::endl; + std::cerr << "Warning - track " << buffers.begin()->first.trackID << " doesn't have enough keyframes to be reliably served." << std::endl; } std::string track = trackMapping[buffers.begin()->first.trackID]; keyframes[buffers.begin()->first.trackID].erase(buffers.begin()->first); diff --git a/lib/procs.cpp b/lib/procs.cpp index 7afa1851..0fa99625 100644 --- a/lib/procs.cpp +++ b/lib/procs.cpp @@ -91,17 +91,9 @@ void Util::Procs::childsig_handler(int signum){ return; } int status; - pid_t ret = waitpid( -1, &status, WNOHANG); - if (ret == 0){ //ignore, would block otherwise - return; - }else if (ret < 0){ - if (errno == EINTR){ - childsig_handler(signum); - return; - } -#if DEBUG >= 3 - std::cerr << "SIGCHLD received, but no child died"; -#endif + pid_t ret = waitpid( -1, &status, 0); + if (ret <= 0){ + childsig_handler(signum); return; } int exitcode;