Fixes for segfaults when the connection to the metadata gets lost
Set stream RelAccx pages to null pointers if we cannot reload those pages
This commit is contained in:
parent
b61aab8719
commit
5af441d16b
3 changed files with 13 additions and 0 deletions
|
@ -1298,6 +1298,8 @@ namespace DTSC{
|
|||
streamPage.init(pageName, 0, false, true);
|
||||
if (!streamPage.mapped){
|
||||
INFO_MSG("Page %s not found", pageName);
|
||||
stream = Util::RelAccX();
|
||||
trackList = Util::RelAccX();
|
||||
return true;
|
||||
}
|
||||
stream = Util::RelAccX(streamPage.mapped, true);
|
||||
|
|
|
@ -846,6 +846,10 @@ namespace Mist{
|
|||
|
||||
// unload pages that haven't been used for a while
|
||||
removeUnused();
|
||||
if (!M){
|
||||
Util::logExitReason(ER_SHM_LOST, "Lost connection to metadata");
|
||||
break;
|
||||
}
|
||||
|
||||
if (M.getLive() && !internalOnly){
|
||||
uint64_t currLastUpdate = M.getLastUpdated();
|
||||
|
|
|
@ -187,6 +187,10 @@ namespace Mist{
|
|||
/// Detected issues in string format, or empty string if no issues
|
||||
/// ~~~~~~~~~~~~~~~
|
||||
void inputBuffer::updateMeta(){
|
||||
if (!M){
|
||||
Util::logExitReason(ER_SHM_LOST, "Lost connection to metadata");
|
||||
return;
|
||||
}
|
||||
static bool wentDry = false;
|
||||
static uint64_t lastFragCount = 0xFFFFull;
|
||||
static uint32_t lastBPS = 0; /*LTS*/
|
||||
|
@ -329,6 +333,9 @@ namespace Mist{
|
|||
|
||||
void inputBuffer::removeUnused(){
|
||||
meta.reloadReplacedPagesIfNeeded();
|
||||
if (!meta){
|
||||
return;
|
||||
}
|
||||
// first remove all tracks that have not been updated for too long
|
||||
bool changed = true;
|
||||
while (changed){
|
||||
|
|
Loading…
Add table
Reference in a new issue