A few months ago we'd digged jackd code in #alsa IRC trying to find why it<br>fails with "ALSA: could not start playback (File descriptor in bad state)"<br>when run on top "type bluetooth" pcm. <br><br>The reason was in a single line (both in jack1/drivers/alsa/alsa_driver.c<br>and jack2/linux/alsa/alsa_driver.c):<br>  if ((err = snd_pcm_start (driver->playback_handle)) < 0) {<br>which always fails after snd_pcm_mmap_commit() filling the buffer,<br>because pcm's already in RUNNING state and can't be started again:<br>> http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html<br>> For playback, if samples in ring buffer is equal or greater than<br>> the start threshold parameters and the stream is not running,<br>> the stream will be started automatically<br><br>The following small patch fixes it for both jack1 and jack2:<br>--- alsa_driver.c<br>+++ alsa_driver.c       <br>@@ -1055,7 +1055,8 @@ alsa_driver_start (alsa_driver_t *driver<br>                                     driver->user_nperiods<br>                                     * driver->frames_per_cycle);<br>                <br>-               if ((err = snd_pcm_start (driver->playback_handle)) < 0) {<br>+               if (snd_pcm_state(driver->playback_handle) != SND_PCM_STATE_RUNNING<br>+                   && (err = snd_pcm_start (driver->playback_handle)) < 0) {<br>                        jack_error ("ALSA: could not start playback (%s)",<br>                                    snd_strerror (err));<br>                        return -1;<br><br>