Fix bug for memory-backed DTSC::Meta when tracks are added
This commit is contained in:
parent
ffd22a45d4
commit
95706337c1
1 changed files with 21 additions and 19 deletions
20
lib/dtsc.cpp
20
lib/dtsc.cpp
|
@ -561,18 +561,18 @@ namespace DTSC{
|
||||||
if (getType() != DTSC_OBJ && getType() != DTSC_CON){return;}
|
if (getType() != DTSC_OBJ && getType() != DTSC_CON){return;}
|
||||||
char * i = p + 1;
|
char * i = p + 1;
|
||||||
//object, scan contents
|
//object, scan contents
|
||||||
while (i[0] + i[1] != 0 && i < p + len) { //while not encountering 0x0000 (we assume 0x0000EE)
|
while (i[0] + i[1] != 0 && i < p + len){//while not encountering 0x0000 (we assume 0x0000EE)
|
||||||
if (i + 2 >= p + len) {
|
if (i + 2 >= p + len){
|
||||||
return;//out of packet!
|
return;//out of packet!
|
||||||
}
|
}
|
||||||
uint16_t strlen = Bit::btohs(i);
|
uint16_t strlen = Bit::btohs(i);
|
||||||
i += 2;
|
i += 2;
|
||||||
if (ind_len == strlen && strncmp(indice, i, strlen) == 0) {
|
if (ind_len == strlen && strncmp(indice, i, strlen) == 0){
|
||||||
memset(i, 0, strlen);
|
memset(i, 0, strlen);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
i = skipDTSC(i + strlen, p + len);
|
i = skipDTSC(i + strlen, p + len);
|
||||||
if (!i) {return;}
|
if (!i){return;}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1514,9 +1514,10 @@ namespace DTSC{
|
||||||
/// To be called from the various inputs/outputs whenever they want to add a track.
|
/// 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){
|
size_t Meta::addTrack(size_t fragCount, size_t keyCount, size_t partCount, size_t pageCount, bool setValid){
|
||||||
char pageName[NAME_BUFFER_SIZE];
|
char pageName[NAME_BUFFER_SIZE];
|
||||||
|
IPC::semaphore trackLock;
|
||||||
|
if (!isMemBuf){
|
||||||
snprintf(pageName, NAME_BUFFER_SIZE, SEM_TRACKLIST, streamName.c_str());
|
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){
|
if (!trackLock){
|
||||||
FAIL_MSG("Could not open semaphore to add track!");
|
FAIL_MSG("Could not open semaphore to add track!");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1527,6 +1528,8 @@ namespace DTSC{
|
||||||
FAIL_MSG("Not adding track: stream is shutting down");
|
FAIL_MSG("Not adding track: stream is shutting down");
|
||||||
return -1;
|
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)) +
|
||||||
|
@ -1557,7 +1560,7 @@ namespace DTSC{
|
||||||
trackList.setInt(trackPidField, getpid(), tNumber);
|
trackList.setInt(trackPidField, getpid(), tNumber);
|
||||||
trackList.setInt(trackSourceTidField, INVALID_TRACK_ID, tNumber);
|
trackList.setInt(trackSourceTidField, INVALID_TRACK_ID, tNumber);
|
||||||
if (setValid){validateTrack(tNumber);}
|
if (setValid){validateTrack(tNumber);}
|
||||||
trackLock.post();
|
if (!isMemBuf){trackLock.post();}
|
||||||
return tNumber;
|
return tNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2337,8 +2340,7 @@ namespace DTSC{
|
||||||
}
|
}
|
||||||
tMemBuf.clear();
|
tMemBuf.clear();
|
||||||
sizeMemBuf.clear();
|
sizeMemBuf.clear();
|
||||||
}
|
}else if (isMaster){
|
||||||
if (isMaster){
|
|
||||||
char pageName[NAME_BUFFER_SIZE];
|
char pageName[NAME_BUFFER_SIZE];
|
||||||
snprintf(pageName, NAME_BUFFER_SIZE, SEM_TRACKLIST, streamName.c_str());
|
snprintf(pageName, NAME_BUFFER_SIZE, SEM_TRACKLIST, streamName.c_str());
|
||||||
IPC::semaphore trackLock(pageName, O_CREAT|O_RDWR, ACCESSPERMS, 1);
|
IPC::semaphore trackLock(pageName, O_CREAT|O_RDWR, ACCESSPERMS, 1);
|
||||||
|
|
Loading…
Add table
Reference in a new issue