Index: /trunk/src/VBox/Devices/Audio/DrvAudio.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DrvAudio.cpp	(revision 73681)
+++ /trunk/src/VBox/Devices/Audio/DrvAudio.cpp	(revision 73682)
@@ -875,4 +875,7 @@
 #endif
 
+    /* Whether to discard the incoming data or not. */
+    bool fToBitBucket = false;
+
     do
     {
@@ -884,10 +887,13 @@
         }
 
-        if (   pThis->pHostDrvAudio
-            && pThis->pHostDrvAudio->pfnGetStatus
-            && pThis->pHostDrvAudio->pfnGetStatus(pThis->pHostDrvAudio, PDMAUDIODIR_OUT) != PDMAUDIOBACKENDSTS_RUNNING)
-        {
-            rc = VERR_AUDIO_STREAM_NOT_READY;
-            break;
+        if (pThis->pHostDrvAudio)
+        {
+            /* If the backend's stream is not writable, all written data goes to /dev/null. */
+            if (!DrvAudioHlpStreamStatusCanWrite(
+                pThis->pHostDrvAudio->pfnStreamGetStatus(pThis->pHostDrvAudio, pStream->pvBackend)))
+            {
+                fToBitBucket = true;
+                break;
+            }
         }
 
@@ -978,4 +984,10 @@
     if (RT_SUCCESS(rc))
     {
+        if (fToBitBucket)
+        {
+            Log3Func(("[%s] Backend stream not ready (yet), discarding written data\n", pStream->szName));
+            cbWrittenTotal = cbBuf; /* Report all data as being written to the caller. */
+        }
+
         if (pcbWritten)
             *pcbWritten = cbWrittenTotal;
@@ -2740,5 +2752,5 @@
         {
             /*
-             * If Nothing is readable, check if the stream on the backend side is ready to be read from.
+             * If nothing is readable, check if the stream on the backend side is ready to be read from.
              * If it isn't, return the number of bytes readable since the last read from this stream.
              *
@@ -2748,5 +2760,5 @@
              */
             if (!DrvAudioHlpStreamStatusCanRead(
-                    pThis->pHostDrvAudio->pfnStreamGetStatus(pThis->pHostDrvAudio, pStream->pvBackend)))
+                pThis->pHostDrvAudio->pfnStreamGetStatus(pThis->pHostDrvAudio, pStream->pvBackend)))
             {
                 cbReadable = DrvAudioHlpNanoToBytes(RTTimeNanoTS() - pStream->tsLastReadWrittenNs,
@@ -2760,6 +2772,6 @@
     }
 
-        Log3Func(("[%s] cbReadable=%RU32 (%RU64ms)\n",
-                  pStream->szName, cbReadable, DrvAudioHlpBytesToMilli(cbReadable, &pStream->Host.Cfg.Props)));
+    Log3Func(("[%s] cbReadable=%RU32 (%RU64ms)\n",
+              pStream->szName, cbReadable, DrvAudioHlpBytesToMilli(cbReadable, &pStream->Host.Cfg.Props)));
 
     rc2 = RTCritSectLeave(&pThis->CritSect);
@@ -2787,4 +2799,6 @@
     uint32_t cbWritable = 0;
 
+    /* Note: We don't propage the backend stream's status to the outside -- it's the job of this
+     *       audio connector to make sense of it. */
     if (DrvAudioHlpStreamStatusCanWrite(pStream->fStatus))
     {
@@ -2795,5 +2809,5 @@
     }
 
-    Log3Func(("[%s] cbWritable=%RU32 (%RU64ms2)\n",
+    Log3Func(("[%s] cbWritable=%RU32 (%RU64ms)\n",
               pStream->szName, cbWritable, DrvAudioHlpBytesToMilli(cbWritable, &pStream->Host.Cfg.Props)));
 
