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
43#include <assert.h>43#include <assert.h>
44#if !defined(_WIN32)44#if !defined(_WIN32)
45#include <semaphore.h>45#include <semaphore.h>
46#include <unistd.h>
46#endif//!_WIN3247#endif//!_WIN32
47#ifndef SEM_NAME_MAX48#ifndef SEM_NAME_MAX
48// length of semaphore name should be system constrained at least on mac 10.749// 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
317 "pThreadPEncCtx");318 "pThreadPEncCtx");
318 WELS_VERIFY_RETURN_PROC_IF (1, (NULL == pSmt->pThreadPEncCtx), FreeMemorySvc (ppCtx))319 WELS_VERIFY_RETURN_PROC_IF (1, (NULL == pSmt->pThreadPEncCtx), FreeMemorySvc (ppCtx))
319 320
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
320 iIdx = 0;328 iIdx = 0;
321 while (iIdx < iNumSpatialLayers) {329 while (iIdx < iNumSpatialLayers) {
322 SSliceConfig* pMso = &pPara->sDependencyLayers[iIdx].sSliceCfg;330 SSliceConfig* pMso = &pPara->sDependencyLayers[iIdx].sSliceCfg;
@@ -360,34 +368,34 @@ int32_t RequestMtResource (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pCodingPara · 37 unmodified lines
360 pSmt->pThreadHandles[iIdx] = 0;368 pSmt->pThreadHandles[iIdx] = 0;
361 369
362#ifdef _WIN32370#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);
364 err = WelsEventOpen (&pSmt->pFinSliceCodingEvent[iIdx], name);372 err = WelsEventOpen (&pSmt->pFinSliceCodingEvent[iIdx], name);
365#if defined(ENABLE_TRACE_MT)373#if defined(ENABLE_TRACE_MT)
366 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pFinSliceCodingEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);374 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pFinSliceCodingEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
367#endif375#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);
369 err = WelsEventOpen (&pSmt->pExitEncodeEvent[iIdx], name);377 err = WelsEventOpen (&pSmt->pExitEncodeEvent[iIdx], name);
370#if defined(ENABLE_TRACE_MT)378#if defined(ENABLE_TRACE_MT)
371 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pExitEncodeEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);379 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pExitEncodeEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
372#endif380#endif
373#endif//_WIN32381#endif//_WIN32
374 // length of semaphore name should be system constrained at least on mac 10.7382 // 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);
376 err = WelsEventOpen (&pSmt->pUpdateMbListEvent[iIdx], name);384 err = WelsEventOpen (&pSmt->pUpdateMbListEvent[iIdx], name);
377#if defined(ENABLE_TRACE_MT)385#if defined(ENABLE_TRACE_MT)
378 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pUpdateMbListEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);386 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pUpdateMbListEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
379#endif387#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);
381 err = WelsEventOpen (&pSmt->pFinUpdateMbListEvent[iIdx], name);389 err = WelsEventOpen (&pSmt->pFinUpdateMbListEvent[iIdx], name);
382#if defined(ENABLE_TRACE_MT)390#if defined(ENABLE_TRACE_MT)
383 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pFinUpdateMbListEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);391 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pFinUpdateMbListEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
384#endif392#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);
386 err = WelsEventOpen (&pSmt->pSliceCodedEvent[iIdx], name);394 err = WelsEventOpen (&pSmt->pSliceCodedEvent[iIdx], name);
387#if defined(ENABLE_TRACE_MT)395#if defined(ENABLE_TRACE_MT)
388 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pSliceCodedEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);396 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pSliceCodedEvent%d named(%s) ret%d err%d\n", iIdx, name, err, errno);
389#endif397#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);
391 err = WelsEventOpen (&pSmt->pReadySliceCodingEvent[iIdx], name);399 err = WelsEventOpen (&pSmt->pReadySliceCodingEvent[iIdx], name);
392#if defined(ENABLE_TRACE_MT)400#if defined(ENABLE_TRACE_MT)
393 WelsLog ((*ppCtx), WELS_LOG_INFO, "[MT] Open pReadySliceCodingEvent%d = 0x%p named(%s) ret%d err%d\n", iIdx,401 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
464 if (pSmt->pThreadHandles != NULL && pSmt->pThreadHandles[iIdx] != NULL)472 if (pSmt->pThreadHandles != NULL && pSmt->pThreadHandles[iIdx] != NULL)
465 WelsThreadDestroy (&pSmt->pThreadHandles[iIdx]);473 WelsThreadDestroy (&pSmt->pThreadHandles[iIdx]);
466 474
467 WelsSnprintf (ename, SEM_NAME_MAX, "fs%d%p", iIdx, (void*) (*ppCtx));475 WelsSnprintf (ename, SEM_NAME_MAX, "fs%d%s", iIdx, pSmt->eventNamespace);
468 WelsEventClose (&pSmt->pFinSliceCodingEvent[iIdx], ename);476 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);
470 WelsEventClose (&pSmt->pExitEncodeEvent[iIdx], ename);478 WelsEventClose (&pSmt->pExitEncodeEvent[iIdx], ename);
471#endif//_WIN32479#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);
473 WelsEventClose (&pSmt->pSliceCodedEvent[iIdx], ename);481 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);
475 WelsEventClose (&pSmt->pReadySliceCodingEvent[iIdx], ename);483 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);
477 WelsEventClose (&pSmt->pUpdateMbListEvent[iIdx], ename);485 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);
479 WelsEventClose (&pSmt->pFinUpdateMbListEvent[iIdx], ename);487 WelsEventClose (&pSmt->pFinUpdateMbListEvent[iIdx], ename);
480 488
481 ++ iIdx;489 ++ 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