Fix bug for memory-backed DTSC::Meta when tracks are added

This commit is contained in:
Thulinma 2020-08-13 00:11:26 +02:00
parent ffd22a45d4
commit 95706337c1

View file

@ -1514,9 +1514,10 @@ namespace DTSC{
/// To be called from the various inputs/outputs whenever they want to add a track.
size_t Meta::addTrack(size_t fragCount, size_t keyCount, size_t partCount, size_t pageCount, bool setValid){
char pageName[NAME_BUFFER_SIZE];
IPC::semaphore trackLock;
if (!isMemBuf){
snprintf(pageName, NAME_BUFFER_SIZE, SEM_TRACKLIST, streamName.c_str());
IPC::semaphore trackLock(pageName, O_CREAT | O_RDWR, ACCESSPERMS, 1);
trackLock.open(pageName, O_CREAT | O_RDWR, ACCESSPERMS, 1);
if (!trackLock){
FAIL_MSG("Could not open semaphore to add track!");
return -1;
@ -1527,6 +1528,8 @@ namespace DTSC{
FAIL_MSG("Not adding track: stream is shutting down");
return -1;
}
}
size_t pageSize = TRACK_TRACK_OFFSET + TRACK_TRACK_RECORDSIZE +
(TRACK_FRAGMENT_OFFSET + (TRACK_FRAGMENT_RECORDSIZE * fragCount)) +
(TRACK_KEY_OFFSET + (TRACK_KEY_RECORDSIZE * keyCount)) +
@ -1557,7 +1560,7 @@ namespace DTSC{
trackList.setInt(trackPidField, getpid(), tNumber);
trackList.setInt(trackSourceTidField, INVALID_TRACK_ID, tNumber);
if (setValid){validateTrack(tNumber);}
trackLock.post();
if (!isMemBuf){trackLock.post();}
return tNumber;
}
@ -2337,8 +2340,7 @@ namespace DTSC{
}
tMemBuf.clear();
sizeMemBuf.clear();
}
if (isMaster){
}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);