Message ID | 1395400229-22957-10-git-send-email-o-takashi@sakamocchi.jp (mailing list archive) |
---|---|
State | Accepted |
Commit | c8de6dbbbb422030d3c174146b2137e69a528d69 |
Headers | show |
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;
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(-)