Fixed buffer disconnecting pushed inputs if they shared a PID with a viewer that disconnected

This commit is contained in:
Thulinma 2020-11-28 23:56:49 +01:00
parent 3baa8d1524
commit 9f2fe22074
2 changed files with 6 additions and 6 deletions

View file

@ -519,7 +519,7 @@ namespace Mist{
///\todo Add tracing of earliest watched keys, to prevent data going out of memory for ///\todo Add tracing of earliest watched keys, to prevent data going out of memory for
/// still-watching viewers /// still-watching viewers
if (!(users.getStatus(id) & COMM_STATUS_DISCONNECT) && (users.getStatus(id) & COMM_STATUS_SOURCE)){ if (!(users.getStatus(id) & COMM_STATUS_DISCONNECT) && (users.getStatus(id) & COMM_STATUS_SOURCE)){
sourcePids[users.getPid(id)].insert(users.getTrack(id)); sourcePids[id] = users.getTrack(id);
// GeneratePids holds the pids of the process that generate data, so ignore those for determining if a push is ingested. // GeneratePids holds the pids of the process that generate data, so ignore those for determining if a push is ingested.
if (M.trackValid(users.getTrack(id)) && !generatePids.count(users.getPid(id))){hasPush = true;} if (M.trackValid(users.getTrack(id)) && !generatePids.count(users.getPid(id))){hasPush = true;}
} }
@ -527,11 +527,11 @@ namespace Mist{
if (!(users.getStatus(id) & COMM_STATUS_DONOTTRACK)){++connectedUsers;} if (!(users.getStatus(id) & COMM_STATUS_DONOTTRACK)){++connectedUsers;}
} }
void inputBuffer::userOnDisconnect(size_t id){ void inputBuffer::userOnDisconnect(size_t id){
if (sourcePids.count(users.getPid(id)) && sourcePids[users.getPid(id)].count(users.getTrack(id))){ if (sourcePids.count(id)){
INFO_MSG("Disconnected track %" PRIu32, users.getTrack(id)); INFO_MSG("Disconnected track %zu", sourcePids[id]);
meta.refresh(); meta.refresh();
removeTrack(users.getTrack(id)); removeTrack(sourcePids[id]);
sourcePids[users.getPid(id)].erase(users.getTrack(id)); sourcePids.erase(id);
} }
} }
void inputBuffer::userLeadOut(){ void inputBuffer::userLeadOut(){

View file

@ -53,7 +53,7 @@ namespace Mist{
std::map<std::string, pid_t> runningProcs; // LTS std::map<std::string, pid_t> runningProcs; // LTS
std::set<size_t> generatePids; std::set<size_t> generatePids;
std::map<size_t, std::set<size_t> > sourcePids; std::map<size_t, size_t> sourcePids;
}; };
}// namespace Mist }// namespace Mist