diff mbox

[09/44] firewire-lib: Restrict calling flush_context_completion() when context exists

Message ID 1395400229-22957-10-git-send-email-o-takashi@sakamocchi.jp (mailing list archive)
State Accepted
Commit c8de6dbbbb422030d3c174146b2137e69a528d69
Headers show

Commit Message

Takashi Sakamoto March 21, 2014, 11:09 a.m. UTC
Currently, drivers can bring XRUN state for PCM substreams when error to
queue packets or detecting discontinuity of packet. The application may try to
recover this state by calling snd_pcm_prepare().

Depending on each driver, .prepare() includes restart streaming. Then there
is a state that PCM substreams are running but isochronous contexts are
stopped. In this case, when .pointer() is called, it refers to error pointer.

This commit is for a prevention of this bug.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
---
 sound/firewire/amdtp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff mbox

Patch

diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c
index d2042d9..a216729 100644
--- a/sound/firewire/amdtp.c
+++ b/sound/firewire/amdtp.c
@@ -973,7 +973,7 @@  EXPORT_SYMBOL(amdtp_stream_start);
 unsigned long amdtp_stream_pcm_pointer(struct amdtp_stream *s)
 {
 	/* this optimization is allowed to be racy */
-	if (s->pointer_flush)
+	if (s->pointer_flush && amdtp_stream_running(s))
 		fw_iso_context_flush_completions(s->context);
 	else
 		s->pointer_flush = true;