History

Use an event name that contains the process id

This reduces the risk for namespace collisions if two processes run the encoder simultaneously without address space layout randomization.

Martin Storsjö committed 12 years ago

Commit d4bdef21 parent 4814d582 files · +21 −12Browse files

Showing the changes to codec/encoder/core/src/slice_multi_threading.cpp (1 of 2 files). Show all

Unified · Split

codec/encoder/core/src/slice_multi_threading.cpp+20−12
@@ -43,6 +43,7 @@ · 42 unmodified lines
4343 #include <assert.h>
4444 #if !defined(_WIN32)
4545 #include <semaphore.h>
46+#include <unistd.h>
4647 #endif//!_WIN32
4748 #ifndef SEM_NAME_MAX
4849 // length of semaphore name should be system constrained at least on mac 10.7
@@ -317,6 +318,13 @@ int32_t RequestMtResource (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pCodingPara · 268 unmodified lines
317318 "pThreadPEncCtx");
318319 WELS_VERIFY_RETURN_PROC_IF (1, (NULL == pSmt->pThreadPEncCtx), FreeMemorySvc (ppCtx))
319320
321+#ifdef _WIN32
322+ // Dummy event namespace, the windows events don't actually use this
323+ WelsSnprintf (pSmt->eventNamespace, sizeof(pSmt->eventNamespace), "%p", (void*) (*ppCtx));
324+#else
325+ WelsSnprintf (pSmt->eventNamespace, sizeof(pSmt->eventNamespace), "%p%x", (void*) (*ppCtx), getpid());
326+#endif//!_WIN32
327+
320328 iIdx = 0;
321329 while (iIdx < iNumSpatialLayers) {
322330 SSliceConfig* pMso = &pPara->sDependencyLayers[iIdx].sSliceCfg;
@@ -360,34 +368,34 @@ int32_t RequestMtResource (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pCodingPara · 37 unmodified lines
360368 pSmt->pThreadHandles[iIdx] = 0;
361369
362370 #ifdef _WIN32
363− WelsSnprintf (name, SEM_NAME_MAX, "fs%d%p", iIdx, (void*) (*ppCtx));
371+ WelsSnprintf (name, SEM_NAME_MAX, "fs%d%s", iIdx, pSmt->eventNamespace);
364372 err = WelsEventOpen (&pSmt->pFinSliceCodingEvent[iIdx], name);
365373 #if defined(ENABLE_TRACE_MT)
366374 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pFinSliceCodingEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
367375 #endif
368− WelsSnprintf (name, SEM_NAME_MAX, "ee%d%p", iIdx, (void*) (*ppCtx));
376+ WelsSnprintf (name, SEM_NAME_MAX, "ee%d%s", iIdx, pSmt->eventNamespace);
369377 err = WelsEventOpen (&pSmt->pExitEncodeEvent[iIdx], name);
370378 #if defined(ENABLE_TRACE_MT)
371379 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pExitEncodeEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
372380 #endif
373381 #endif//_WIN32
374382 // length of semaphore name should be system constrained at least on mac 10.7
375− WelsSnprintf (name, SEM_NAME_MAX, "ud%d%p", iIdx, (void*) (*ppCtx));
383+ WelsSnprintf (name, SEM_NAME_MAX, "ud%d%s", iIdx, pSmt->eventNamespace);
376384 err = WelsEventOpen (&pSmt->pUpdateMbListEvent[iIdx], name);
377385 #if defined(ENABLE_TRACE_MT)
378386 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pUpdateMbListEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
379387 #endif
380− WelsSnprintf (name, SEM_NAME_MAX, "fu%d%p", iIdx, (void*) (*ppCtx));
388+ WelsSnprintf (name, SEM_NAME_MAX, "fu%d%s", iIdx, pSmt->eventNamespace);
381389 err = WelsEventOpen (&pSmt->pFinUpdateMbListEvent[iIdx], name);
382390 #if defined(ENABLE_TRACE_MT)
383391 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pFinUpdateMbListEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
384392 #endif
385− WelsSnprintf (name, SEM_NAME_MAX, "sc%d%p", iIdx, (void*) (*ppCtx));
393+ WelsSnprintf (name, SEM_NAME_MAX, "sc%d%s", iIdx, pSmt->eventNamespace);
386394 err = WelsEventOpen (&pSmt->pSliceCodedEvent[iIdx], name);
387395 #if defined(ENABLE_TRACE_MT)
388396 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pSliceCodedEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
389397 #endif
390− WelsSnprintf (name, SEM_NAME_MAX, "rc%d%p", iIdx, (void*) (*ppCtx));
398+ WelsSnprintf (name, SEM_NAME_MAX, "rc%d%s", iIdx, pSmt->eventNamespace);
391399 err = WelsEventOpen (&pSmt->pReadySliceCodingEvent[iIdx], name);
392400 #if defined(ENABLE_TRACE_MT)
393401 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pReadySliceCodingEvent%d = 0x%p named(%s) ret%d err%d\n", iIdx,
@@ -464,18 +472,18 @@ void ReleaseMtResource (sWelsEncCtx** ppCtx) { · 70 unmodified lines
464472 if (pSmt->pThreadHandles != NULL && pSmt->pThreadHandles[iIdx] != NULL)
465473 WelsThreadDestroy (&pSmt->pThreadHandles[iIdx]);
466474
467− WelsSnprintf (ename, SEM_NAME_MAX, "fs%d%p", iIdx, (void*) (*ppCtx));
475+ WelsSnprintf (ename, SEM_NAME_MAX, "fs%d%s", iIdx, pSmt->eventNamespace);
468476 WelsEventClose (&pSmt->pFinSliceCodingEvent[iIdx], ename);
469− WelsSnprintf (ename, SEM_NAME_MAX, "ee%d%p", iIdx, (void*) (*ppCtx));
477+ WelsSnprintf (ename, SEM_NAME_MAX, "ee%d%s", iIdx, pSmt->eventNamespace);
470478 WelsEventClose (&pSmt->pExitEncodeEvent[iIdx], ename);
471479 #endif//_WIN32
472− WelsSnprintf (ename, SEM_NAME_MAX, "sc%d%p", iIdx, (void*) (*ppCtx));
480+ WelsSnprintf (ename, SEM_NAME_MAX, "sc%d%s", iIdx, pSmt->eventNamespace);
473481 WelsEventClose (&pSmt->pSliceCodedEvent[iIdx], ename);
474− WelsSnprintf (ename, SEM_NAME_MAX, "rc%d%p", iIdx, (void*) (*ppCtx));
482+ WelsSnprintf (ename, SEM_NAME_MAX, "rc%d%s", iIdx, pSmt->eventNamespace);
475483 WelsEventClose (&pSmt->pReadySliceCodingEvent[iIdx], ename);
476− WelsSnprintf (ename, SEM_NAME_MAX, "ud%d%p", iIdx, (void*) (*ppCtx));
484+ WelsSnprintf (ename, SEM_NAME_MAX, "ud%d%s", iIdx, pSmt->eventNamespace);
477485 WelsEventClose (&pSmt->pUpdateMbListEvent[iIdx], ename);
478− WelsSnprintf (ename, SEM_NAME_MAX, "fu%d%p", iIdx, (void*) (*ppCtx));
486+ WelsSnprintf (ename, SEM_NAME_MAX, "fu%d%s", iIdx, pSmt->eventNamespace);
479487 WelsEventClose (&pSmt->pFinUpdateMbListEvent[iIdx], ename);
480488
481489 ++ iIdx;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t