Changeset 67551 in vbox
- Timestamp:
- Jun 22, 2017 8:06:06 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 116297
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
r67547 r67551 87 87 /** Shutdown indicator. */ 88 88 volatile bool fAbortLoop; 89 /** Abort wait loop during enumeration.*/90 volatile bool f AbortEnumLoop;89 /** Enumeration operation successful? */ 90 volatile bool fEnumOpSuccess; 91 91 /** Pointer to host audio interface. */ 92 92 PDMIHOSTAUDIO IHostAudio; … … 191 191 192 192 pThis->fAbortLoop = true; 193 pThis->fAbortEnumLoop = true;194 193 pa_threaded_mainloop_signal(pThis->pMainLoop, 0); 195 194 } … … 273 272 * Synchronously wait until an operation completed. 274 273 */ 275 static int paWaitForEx(PDRVHOSTPULSEAUDIO pThis, pa_operation *pOP, RTMSINTERVAL cMsTimeout , bool fDebug)274 static int paWaitForEx(PDRVHOSTPULSEAUDIO pThis, pa_operation *pOP, RTMSINTERVAL cMsTimeout) 276 275 { 277 276 AssertPtrReturn(pThis, VERR_INVALID_POINTER); 278 277 AssertPtrReturn(pOP, VERR_INVALID_POINTER); 279 NOREF(fDebug);280 278 281 279 int rc = VINF_SUCCESS; 282 pThis->fAbortEnumLoop = false;283 280 284 281 uint64_t u64StartMs = RTTimeMilliTS(); … … 288 285 { 289 286 AssertPtr(pThis->pMainLoop); 290 // if (fDebug)291 // LogRel(("PulseAudio: pa_threaded_mainloop_wait\n"));292 287 pa_threaded_mainloop_wait(pThis->pMainLoop); 293 if (fDebug)294 LogRel(("PulseAudio: pa_threaded_mainloop_wait done\n"));295 if (pThis->fAbortEnumLoop)296 break;297 288 if ( !pThis->pContext 298 289 || pa_context_get_state(pThis->pContext) != PA_CONTEXT_READY) … … 318 309 319 310 320 static int paWaitFor(PDRVHOSTPULSEAUDIO pThis, pa_operation *pOP , bool fDebug = false)321 { 322 return paWaitForEx(pThis, pOP, 10 * 1000 /* 10s timeout */ , fDebug);311 static int paWaitFor(PDRVHOSTPULSEAUDIO pThis, pa_operation *pOP) 312 { 313 return paWaitForEx(pThis, pOP, 10 * 1000 /* 10s timeout */); 323 314 } 324 315 … … 947 938 static void paEnumSinkCb(pa_context *pCtx, const pa_sink_info *pInfo, int eol, void *pvUserData) 948 939 { 949 LogRel(("PulseAudio: entering paEnumSinkCb\n"));950 940 if (eol > 0) 951 {952 LogRel(("PulseAudio: paEnumSinkCb: eol=%d\n", eol));953 941 return; 954 }955 942 956 943 PPULSEAUDIOENUMCBCTX pCbCtx = (PPULSEAUDIOENUMCBCTX)pvUserData; … … 960 947 if (eol < 0) 961 948 { 962 pThis->f AbortEnumLoop = true;949 pThis->fEnumOpSuccess = false; 963 950 pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0); 964 LogRel(("PulseAudio: paEnumSinkCb eol=%d, signalling\n", eol));965 951 return; 966 952 } … … 974 960 pCbCtx->cDevOut++; 975 961 976 LogRel(("PulseAudio: paEnumSinkCb signalling\n"));962 pThis->fEnumOpSuccess = true; 977 963 pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0); 978 964 } … … 981 967 static void paEnumSourceCb(pa_context *pCtx, const pa_source_info *pInfo, int eol, void *pvUserData) 982 968 { 983 LogRel(("PulseAudio: entering paEnumSourceCb\n"));984 969 if (eol > 0) 985 {986 LogRel(("PulseAudio: paEnumSourceCb: eol=%d\n", eol));987 970 return; 988 }989 971 990 972 PPULSEAUDIOENUMCBCTX pCbCtx = (PPULSEAUDIOENUMCBCTX)pvUserData; … … 994 976 if (eol < 0) 995 977 { 996 pThis->f AbortEnumLoop = true;978 pThis->fEnumOpSuccess = false; 997 979 pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0); 998 LogRel(("PulseAudio: paEnumSourceCb eol=%d, signalling\n", eol));999 980 return; 1000 981 } … … 1008 989 pCbCtx->cDevIn++; 1009 990 1010 LogRel(("PulseAudio: paEnumSourceCb signalling\n"));991 pThis->fEnumOpSuccess = true; 1011 992 pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0); 1012 993 } … … 1015 996 static void paEnumServerCb(pa_context *pCtx, const pa_server_info *pInfo, void *pvUserData) 1016 997 { 1017 LogRel(("PulseAudio: entering paEnumServerCb\n"));1018 1019 998 AssertPtrReturnVoid(pCtx); 1020 999 PPULSEAUDIOENUMCBCTX pCbCtx = (PPULSEAUDIOENUMCBCTX)pvUserData; … … 1025 1004 if (!pInfo) 1026 1005 { 1027 pThis->fAbortEnumLoop = true; 1028 LogRel(("PulseAudio: paEnumServerCb no info, signalling\n")); 1006 pThis->fEnumOpSuccess = false; 1029 1007 pa_threaded_mainloop_signal(pCbCtx->pDrv->pMainLoop, 0); 1030 1008 return; … … 1043 1021 } 1044 1022 1045 LogRel(("PulseAudio: paEnumServerCb signalling\n"));1023 pThis->fEnumOpSuccess = true; 1046 1024 pa_threaded_mainloop_signal(pThis->pMainLoop, 0); 1047 1025 } … … 1069 1047 bool fLog = (fEnum & PULSEAUDIOENUMCBFLAGS_LOG); 1070 1048 1049 pa_threaded_mainloop_lock(pThis->pMainLoop); 1050 1071 1051 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) 1076 1056 rc = VERR_AUDIO_BACKEND_INIT_FAILED; /* error code does not matter */ 1077 1057 if (RT_SUCCESS(rc)) … … 1083 1063 1084 1064 LogRel(("PulseAudio: starting sink enumeration\n")); 1065 pThis->fEnumOpSuccess = false; 1085 1066 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) 1090 1070 rc = VERR_AUDIO_BACKEND_INIT_FAILED; /* error code does not matter */ 1091 1071 if ( RT_FAILURE(rc) … … 1106 1086 1107 1087 LogRel(("PulseAudio: starting source enumeration\n")); 1088 pThis->fEnumOpSuccess = false; 1108 1089 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) 1112 1093 && fLog) 1113 1094 { … … 1145 1126 else if (fLog) 1146 1127 LogRel(("PulseAudio: Error enumerating PulseAudio server properties\n")); 1128 1129 pa_threaded_mainloop_unlock(pThis->pMainLoop); 1147 1130 1148 1131 LogFlowFuncLeaveRC(rc);
Note:
See TracChangeset
for help on using the changeset viewer.