VirtualBox

Changeset 67551 in vbox


Ignore:
Timestamp:
Jun 22, 2017 8:06:06 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
116297
Message:

DrvHostPulseAudio: logging, locking

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp

    r67547 r67551  
    8787    /** Shutdown indicator. */
    8888    volatile bool         fAbortLoop;
    89     /** Abort wait loop during enumeration. */
    90     volatile bool         fAbortEnumLoop;
     89    /** Enumeration operation successful? */
     90    volatile bool         fEnumOpSuccess;
    9191    /** Pointer to host audio interface. */
    9292    PDMIHOSTAUDIO         IHostAudio;
     
    191191
    192192    pThis->fAbortLoop = true;
    193     pThis->fAbortEnumLoop = true;
    194193    pa_threaded_mainloop_signal(pThis->pMainLoop, 0);
    195194}
     
    273272 * Synchronously wait until an operation completed.
    274273 */
    275 static int paWaitForEx(PDRVHOSTPULSEAUDIO pThis, pa_operation *pOP, RTMSINTERVAL cMsTimeout, bool fDebug)
     274static int paWaitForEx(PDRVHOSTPULSEAUDIO pThis, pa_operation *pOP, RTMSINTERVAL cMsTimeout)
    276275{
    277276    AssertPtrReturn(pThis, VERR_INVALID_POINTER);
    278277    AssertPtrReturn(pOP,   VERR_INVALID_POINTER);
    279     NOREF(fDebug);
    280278
    281279    int rc = VINF_SUCCESS;
    282     pThis->fAbortEnumLoop = false;
    283280
    284281    uint64_t u64StartMs = RTTimeMilliTS();
     
    288285        {
    289286            AssertPtr(pThis->pMainLoop);
    290 //            if (fDebug)
    291 //                LogRel(("PulseAudio: pa_threaded_mainloop_wait\n"));
    292287            pa_threaded_mainloop_wait(pThis->pMainLoop);
    293             if (fDebug)
    294                 LogRel(("PulseAudio: pa_threaded_mainloop_wait done\n"));
    295             if (pThis->fAbortEnumLoop)
    296                 break;
    297288            if (   !pThis->pContext
    298289                || pa_context_get_state(pThis->pContext) != PA_CONTEXT_READY)
     
    318309
    319310
    320 static int paWaitFor(PDRVHOSTPULSEAUDIO pThis, pa_operation *pOP, bool fDebug = false)
    321 {
    322     return paWaitForEx(pThis, pOP, 10 * 1000 /* 10s timeout */, fDebug);
     311static int paWaitFor(PDRVHOSTPULSEAUDIO pThis, pa_operation *pOP)
     312{
     313    return paWaitForEx(pThis, pOP, 10 * 1000 /* 10s timeout */);
    323314}
    324315
     
    947938static void paEnumSinkCb(pa_context *pCtx, const pa_sink_info *pInfo, int eol, void *pvUserData)
    948939{
    949     LogRel(("PulseAudio: entering paEnumSinkCb\n"));
    950940    if (eol > 0)
    951     {
    952         LogRel(("PulseAudio: paEnumSinkCb: eol=%d\n", eol));
    953941        return;
    954     }
    955942
    956943    PPULSEAUDIOENUMCBCTX pCbCtx = (PPULSEAUDIOENUMCBCTX)pvUserData;
     
    960947    if (eol < 0)
    961948    {
    962         pThis->fAbortEnumLoop = true;
     949        pThis->fEnumOpSuccess = false;
    963950        pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0);
    964         LogRel(("PulseAudio: paEnumSinkCb eol=%d, signalling\n", eol));
    965951        return;
    966952    }
     
    974960    pCbCtx->cDevOut++;
    975961
    976     LogRel(("PulseAudio: paEnumSinkCb signalling\n"));
     962    pThis->fEnumOpSuccess = true;
    977963    pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0);
    978964}
     
    981967static void paEnumSourceCb(pa_context *pCtx, const pa_source_info *pInfo, int eol, void *pvUserData)
    982968{
    983     LogRel(("PulseAudio: entering paEnumSourceCb\n"));
    984969    if (eol > 0)
    985     {
    986         LogRel(("PulseAudio: paEnumSourceCb: eol=%d\n", eol));
    987970        return;
    988     }
    989971
    990972    PPULSEAUDIOENUMCBCTX pCbCtx = (PPULSEAUDIOENUMCBCTX)pvUserData;
     
    994976    if (eol < 0)
    995977    {
    996         pThis->fAbortEnumLoop = true;
     978        pThis->fEnumOpSuccess = false;
    997979        pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0);
    998         LogRel(("PulseAudio: paEnumSourceCb eol=%d, signalling\n", eol));
    999980        return;
    1000981    }
     
    1008989    pCbCtx->cDevIn++;
    1009990
    1010     LogRel(("PulseAudio: paEnumSourceCb signalling\n"));
     991    pThis->fEnumOpSuccess = true;
    1011992    pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0);
    1012993}
     
    1015996static void paEnumServerCb(pa_context *pCtx, const pa_server_info *pInfo, void *pvUserData)
    1016997{
    1017     LogRel(("PulseAudio: entering paEnumServerCb\n"));
    1018 
    1019998    AssertPtrReturnVoid(pCtx);
    1020999    PPULSEAUDIOENUMCBCTX pCbCtx = (PPULSEAUDIOENUMCBCTX)pvUserData;
     
    10251004    if (!pInfo)
    10261005    {
    1027         pThis->fAbortEnumLoop = true;
    1028         LogRel(("PulseAudio: paEnumServerCb no info, signalling\n"));
     1006        pThis->fEnumOpSuccess = false;
    10291007        pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0);
    10301008        return;
     
    10431021    }
    10441022
    1045     LogRel(("PulseAudio: paEnumServerCb signalling\n"));
     1023    pThis->fEnumOpSuccess = true;
    10461024    pa_threaded_mainloop_signal(pThis->pMainLoop, 0);
    10471025}
     
    10691047    bool fLog = (fEnum & PULSEAUDIOENUMCBFLAGS_LOG);
    10701048
     1049    pa_threaded_mainloop_lock(pThis->pMainLoop);
     1050
    10711051    LogRel(("PulseAudio: starting server enumeration\n"));
    1072     int rc = paWaitFor(pThis, pa_context_get_server_info(pThis->pContext, paEnumServerCb, &CbCtx), true);
    1073     LogRel(("PulseAudio: server enumeration done rc=%Rrc abort=%d\n", rc, pThis->fAbortEnumLoop));
    1074     if (   RT_SUCCESS(rc)
    1075         && pThis->fAbortEnumLoop)
     1052    pThis->fEnumOpSuccess = false;
     1053    int rc = paWaitFor(pThis, pa_context_get_server_info(pThis->pContext, paEnumServerCb, &CbCtx));
     1054    LogRel(("PulseAudio: server enumeration done rc=%Rrc success=%d\n", rc, pThis->fEnumOpSuccess));
     1055    if (RT_SUCCESS(rc) && !pThis->fEnumOpSuccess)
    10761056        rc = VERR_AUDIO_BACKEND_INIT_FAILED; /* error code does not matter */
    10771057    if (RT_SUCCESS(rc))
     
    10831063
    10841064            LogRel(("PulseAudio: starting sink enumeration\n"));
     1065            pThis->fEnumOpSuccess = false;
    10851066            rc = paWaitFor(pThis, pa_context_get_sink_info_by_name(pThis->pContext, CbCtx.pszDefaultSink,
    1086                                                                    paEnumSinkCb, &CbCtx), true);
    1087             LogRel(("PulseAudio: sink enumeration done rc=%Rrc abort=%d\n", rc, pThis->fAbortEnumLoop));
    1088             if (   RT_SUCCESS(rc)
    1089                 && pThis->fAbortEnumLoop)
     1067                                                                   paEnumSinkCb, &CbCtx));
     1068            LogRel(("PulseAudio: sink enumeration done rc=%Rrc success=%d\n", rc, pThis->fEnumOpSuccess));
     1069            if (RT_SUCCESS(rc) && !pThis->fEnumOpSuccess)
    10901070                rc = VERR_AUDIO_BACKEND_INIT_FAILED; /* error code does not matter */
    10911071            if (   RT_FAILURE(rc)
     
    11061086
    11071087                LogRel(("PulseAudio: starting source enumeration\n"));
     1088                pThis->fEnumOpSuccess = false;
    11081089                rc = paWaitFor(pThis, pa_context_get_source_info_by_name(pThis->pContext, CbCtx.pszDefaultSource,
    1109                                                                          paEnumSourceCb, &CbCtx), true);
    1110                 LogRel(("PulseAudio: source enumeration done rc=%Rrc abort=%d\n", rc, pThis->fAbortEnumLoop));
    1111                 if (   RT_FAILURE(rc)
     1090                                                                         paEnumSourceCb, &CbCtx));
     1091                LogRel(("PulseAudio: source enumeration done rc=%Rrc success=%d\n", rc, pThis->fEnumOpSuccess));
     1092                if (   (RT_FAILURE(rc) || !pThis->fEnumOpSuccess)
    11121093                    && fLog)
    11131094                {
     
    11451126    else if (fLog)
    11461127        LogRel(("PulseAudio: Error enumerating PulseAudio server properties\n"));
     1128   
     1129    pa_threaded_mainloop_unlock(pThis->pMainLoop);
    11471130
    11481131    LogFlowFuncLeaveRC(rc);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette