Jaroslav Kysela <perex@xxxxxxxx> 於 2021年7月8日 週四 下午10:53寫道: > > On 08. 07. 21 15:47, Robert Lee wrote: > > Hi Takashi, > > > > It is a little complex to describe the design in detail, but try to > > explain simply > > what issue we meet. > > > > If w/o the change, after user resumes from the pause, our system would call > > snd_compr_drain() or snd_compr_partial_drain() again after it returns from > > previous drain (when EOF reaches). Then it will block in this drain and no one > > wake it up because EOF has already reached. I add this change to return from > > the previous drain. > > It looks like that the driver does not call snd_compr_drain_notify() so the > state is not updated to SETUP on EOF. > We indeed call snd_compr_drain_notify() on EOF, but after return from wait_for _drain there is another drain again immediately. Looks like the system queue some states change on user space and need to drain again after resume from pause. I suppose there is different design on user space so I add the hook to handle diffent usage. > > Actually, I am wondering how the pause-during-drain can keep the state in > > DRAINING. It should have a different design. :) > > I already proposed to add a new state (because it's a new state), but the > conservative way was elected to avoid user space changes. > > Jaroslav > > -- > Jaroslav Kysela <perex@xxxxxxxx> > Linux Sound Maintainer; ALSA Project; Red Hat, Inc.