Fixed SEM_TRACKLIST not being cleaned up from shared memory on stream shutdown
This commit is contained in:
parent
b989ee0d1f
commit
2bf7c14815
1 changed files with 11 additions and 0 deletions
11
lib/dtsc.cpp
11
lib/dtsc.cpp
|
@ -1522,6 +1522,11 @@ namespace DTSC{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
trackLock.wait();
|
trackLock.wait();
|
||||||
|
if (stream.isExit()){
|
||||||
|
trackLock.post();
|
||||||
|
FAIL_MSG("Not adding track: stream is shutting down");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
size_t pageSize = TRACK_TRACK_OFFSET + TRACK_TRACK_RECORDSIZE +
|
size_t pageSize = TRACK_TRACK_OFFSET + TRACK_TRACK_RECORDSIZE +
|
||||||
(TRACK_FRAGMENT_OFFSET + (TRACK_FRAGMENT_RECORDSIZE * fragCount)) +
|
(TRACK_FRAGMENT_OFFSET + (TRACK_FRAGMENT_RECORDSIZE * fragCount)) +
|
||||||
(TRACK_KEY_OFFSET + (TRACK_KEY_RECORDSIZE * keyCount)) +
|
(TRACK_KEY_OFFSET + (TRACK_KEY_RECORDSIZE * keyCount)) +
|
||||||
|
@ -2334,6 +2339,10 @@ namespace DTSC{
|
||||||
sizeMemBuf.clear();
|
sizeMemBuf.clear();
|
||||||
}
|
}
|
||||||
if (isMaster){
|
if (isMaster){
|
||||||
|
char pageName[NAME_BUFFER_SIZE];
|
||||||
|
snprintf(pageName, NAME_BUFFER_SIZE, SEM_TRACKLIST, streamName.c_str());
|
||||||
|
IPC::semaphore trackLock(pageName, O_CREAT|O_RDWR, ACCESSPERMS, 1);
|
||||||
|
trackLock.tryWaitOneSecond();
|
||||||
std::set<size_t> toRemove;
|
std::set<size_t> toRemove;
|
||||||
for (std::map<size_t, IPC::sharedPage>::iterator it = tM.begin(); it != tM.end(); it++){
|
for (std::map<size_t, IPC::sharedPage>::iterator it = tM.begin(); it != tM.end(); it++){
|
||||||
if (!it->second.mapped){continue;}
|
if (!it->second.mapped){continue;}
|
||||||
|
@ -2344,6 +2353,8 @@ namespace DTSC{
|
||||||
}
|
}
|
||||||
if (streamPage.mapped && stream.isReady()){stream.setExit();}
|
if (streamPage.mapped && stream.isReady()){stream.setExit();}
|
||||||
streamPage.master = true;
|
streamPage.master = true;
|
||||||
|
//Wipe tracklist semaphore. This is not done anywhere else in the codebase.
|
||||||
|
trackLock.unlink();
|
||||||
}
|
}
|
||||||
stream = Util::RelAccX();
|
stream = Util::RelAccX();
|
||||||
trackList = Util::RelAccX();
|
trackList = Util::RelAccX();
|
||||||
|
|
Loading…
Add table
Reference in a new issue