[1/2] plugin:dshare: wrong state reporting
diff mbox

Message ID 1491287392-11251-1-git-send-email-sutar.mounesh@gmail.com
State New
Headers show

Commit Message

sutar.mounesh@gmail.com April 4, 2017, 6:29 a.m. UTC
From: Andreas Pape <apape@de.adit-jv.com>

If plugin dshare detects underrun, it reports this to the user
via return value -EPIPE and setting dshare state to 'xrun' which is correct.
But, if user after this wants to check the stream state, it is misleadingly
reported as 'running' instead of 'xrun'.
With this behavior aplay e.g. will not do a proper underrun handling
(restarting stream) but terminates streaming.
This is due to plugin dshare always returns state of the slave pcm,
in pcm_ops->state() which is not correct.

Signed-off-by: Andreas Pape <apape@de.adit-jv.com>
Signed-off-by: Mounesh Sutar <sutar.mounesh@gmail.com>

Comments

Takashi Iwai April 5, 2017, 7:40 p.m. UTC | #1
On Tue, 04 Apr 2017 08:29:52 +0200,
sutar.mounesh@gmail.com wrote:
> 
> From: Andreas Pape <apape@de.adit-jv.com>
> 
> If plugin dshare detects underrun, it reports this to the user
> via return value -EPIPE and setting dshare state to 'xrun' which is correct.
> But, if user after this wants to check the stream state, it is misleadingly
> reported as 'running' instead of 'xrun'.
> With this behavior aplay e.g. will not do a proper underrun handling
> (restarting stream) but terminates streaming.
> This is due to plugin dshare always returns state of the slave pcm,
> in pcm_ops->state() which is not correct.
> 
> Signed-off-by: Andreas Pape <apape@de.adit-jv.com>
> Signed-off-by: Mounesh Sutar <sutar.mounesh@gmail.com>

Applied now.  Thanks.


Takashi

> 
> diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c
> index 331f799..4c57fb4 100644
> --- a/src/pcm/pcm_dshare.c
> +++ b/src/pcm/pcm_dshare.c
> @@ -244,7 +244,7 @@ static int snd_pcm_dshare_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
>  	default:
>  		break;
>  	}
> -
> +	status->state = snd_pcm_state(pcm);
>  	status->trigger_tstamp = dshare->trigger_tstamp;
>  	status->avail = snd_pcm_mmap_playback_avail(pcm);
>  	status->avail_max = status->avail > dshare->avail_max ? status->avail : dshare->avail_max;
> -- 
> 2.7.4
>

Patch
diff mbox

diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c
index 331f799..4c57fb4 100644
--- a/src/pcm/pcm_dshare.c
+++ b/src/pcm/pcm_dshare.c
@@ -244,7 +244,7 @@  static int snd_pcm_dshare_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
 	default:
 		break;
 	}
-
+	status->state = snd_pcm_state(pcm);
 	status->trigger_tstamp = dshare->trigger_tstamp;
 	status->avail = snd_pcm_mmap_playback_avail(pcm);
 	status->avail_max = status->avail > dshare->avail_max ? status->avail : dshare->avail_max;