Index: /trunk/src/VBox/Devices/Audio/AudioMixer.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/AudioMixer.cpp	(revision 73580)
+++ /trunk/src/VBox/Devices/Audio/AudioMixer.cpp	(revision 73581)
@@ -675,11 +675,38 @@
         return rc;
 
+    /* Input sink and no recording source set? Bail out early. */
+    if (   pSink->enmDir == AUDMIXSINKDIR_INPUT
+        && pSink->In.pStreamRecSource == NULL)
+    {
+        int rc2 = RTCritSectLeave(&pSink->CritSect);
+        AssertRC(rc2);
+
+        return rc;
+    }
+
     PAUDMIXSTREAM pStream;
-    RTListForEach(&pSink->lstStreams, pStream, AUDMIXSTREAM, Node)
-    {
-        int rc2 = audioMixerStreamCtlInternal(pStream, enmCmdStream, AUDMIXSTRMCTL_FLAG_NONE);
-        if (RT_SUCCESS(rc))
-            rc = rc2;
-        /* Keep going. Flag? */
+    if (   pSink->enmDir == AUDMIXSINKDIR_INPUT
+        && pSink->In.pStreamRecSource) /* Any recording source set? */
+    {
+        RTListForEach(&pSink->lstStreams, pStream, AUDMIXSTREAM, Node)
+        {
+            if (pStream == pSink->In.pStreamRecSource)
+            {
+                int rc2 = audioMixerStreamCtlInternal(pStream, enmCmdStream, AUDMIXSTRMCTL_FLAG_NONE);
+                if (RT_SUCCESS(rc))
+                    rc = rc2;
+                /* Keep going. Flag? */
+            }
+        }
+    }
+    else if (pSink->enmDir == AUDMIXSINKDIR_OUTPUT)
+    {
+        RTListForEach(&pSink->lstStreams, pStream, AUDMIXSTREAM, Node)
+        {
+            int rc2 = audioMixerStreamCtlInternal(pStream, enmCmdStream, AUDMIXSTRMCTL_FLAG_NONE);
+            if (RT_SUCCESS(rc))
+                rc = rc2;
+            /* Keep going. Flag? */
+        }
     }
 
@@ -1504,4 +1531,9 @@
         return rc;
 
+    /* Input sink and no recording source set? Bail out early. */
+    if (   pSink->enmDir == AUDMIXSINKDIR_INPUT
+        && pSink->In.pStreamRecSource == NULL)
+        return rc;
+
     /* Number of detected disabled streams of this sink. */
     uint8_t cStreamsDisabled = 0;
@@ -1510,4 +1542,9 @@
     RTListForEachSafe(&pSink->lstStreams, pMixStream, pMixStreamNext, AUDMIXSTREAM, Node)
     {
+        /* Input sink and not the recording source? Skip. */
+        if (   pSink->enmDir == AUDMIXSINKDIR_INPUT
+            && pSink->In.pStreamRecSource != pMixStream)
+            continue;
+
         PPDMAUDIOSTREAM pStream   = pMixStream->pStream;
         AssertPtr(pStream);
