Fix DTSC::Meta::clear() using a semaphore to clear uninitialized state

This commit is contained in:
Thulinma 2020-08-22 12:52:24 +02:00
parent 027bd5f9da
commit b0b5e2ebcc

View file

@ -2351,10 +2351,13 @@ namespace DTSC{
tMemBuf.clear();
sizeMemBuf.clear();
}else 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();
IPC::semaphore trackLock;
if (streamName.size()){
char pageName[NAME_BUFFER_SIZE];
snprintf(pageName, NAME_BUFFER_SIZE, SEM_TRACKLIST, streamName.c_str());
trackLock.open(pageName, O_CREAT|O_RDWR, ACCESSPERMS, 1);
trackLock.tryWaitOneSecond();
}
std::set<size_t> toRemove;
for (std::map<size_t, IPC::sharedPage>::iterator it = tM.begin(); it != tM.end(); it++){
if (!it->second.mapped){continue;}
@ -2365,8 +2368,10 @@ namespace DTSC{
}
if (streamPage.mapped && stream.isReady()){stream.setExit();}
streamPage.master = true;
//Wipe tracklist semaphore. This is not done anywhere else in the codebase.
trackLock.unlink();
if (streamName.size()){
//Wipe tracklist semaphore. This is not done anywhere else in the codebase.
trackLock.unlink();
}
}
stream = Util::RelAccX();
trackList = Util::RelAccX();