From b0b5e2ebcccd7dde01f36cb53c2ed59c47252863 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Sat, 22 Aug 2020 12:52:24 +0200 Subject: [PATCH] Fix DTSC::Meta::clear() using a semaphore to clear uninitialized state --- lib/dtsc.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/dtsc.cpp b/lib/dtsc.cpp index 764c07b5..ffa935fc 100644 --- a/lib/dtsc.cpp +++ b/lib/dtsc.cpp @@ -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 toRemove; for (std::map::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();