mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
ALSA: pcm: use snd_pcm_get_state() in remaining ioctl checks
The recent OSS runtime->state locking cleanup converted the OSS I/O paths to use snd_pcm_get_state(), but a few ioctl-side checks in pcm_native.c still sample runtime->state directly: the prepare pre-checks, the early drain open-state check, and the common snd_pcm_kernel_ioctl() disconnected check. Use snd_pcm_get_state() for those remaining samples. In snd_pcm_pre_prepare(), keep a single state snapshot and reuse it for both the OPEN/DISCONNECTED check and the running-state test. Signed-off-by: Cen Zhang <zzzccc427@gmail.com> Link: https://patch.msgid.link/20260507011944.2897240-1-zzzccc427@gmail.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
5367e2ad14
commit
9fc9caf346
|
|
@ -1973,13 +1973,15 @@ static int snd_pcm_reset(struct snd_pcm_substream *substream)
|
|||
static int snd_pcm_pre_prepare(struct snd_pcm_substream *substream,
|
||||
snd_pcm_state_t state)
|
||||
{
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
snd_pcm_state_t cur_state = snd_pcm_get_state(substream);
|
||||
int f_flags = (__force int)state;
|
||||
|
||||
if (runtime->state == SNDRV_PCM_STATE_OPEN ||
|
||||
runtime->state == SNDRV_PCM_STATE_DISCONNECTED)
|
||||
if (cur_state == SNDRV_PCM_STATE_OPEN ||
|
||||
cur_state == SNDRV_PCM_STATE_DISCONNECTED)
|
||||
return -EBADFD;
|
||||
if (snd_pcm_running(substream))
|
||||
if (cur_state == SNDRV_PCM_STATE_RUNNING ||
|
||||
(cur_state == SNDRV_PCM_STATE_DRAINING &&
|
||||
substream->stream == SNDRV_PCM_STREAM_PLAYBACK))
|
||||
return -EBUSY;
|
||||
substream->f_flags = f_flags;
|
||||
return 0;
|
||||
|
|
@ -2139,7 +2141,7 @@ static int snd_pcm_drain(struct snd_pcm_substream *substream,
|
|||
card = substream->pcm->card;
|
||||
runtime = substream->runtime;
|
||||
|
||||
if (runtime->state == SNDRV_PCM_STATE_OPEN)
|
||||
if (snd_pcm_get_state(substream) == SNDRV_PCM_STATE_OPEN)
|
||||
return -EBADFD;
|
||||
|
||||
if (file) {
|
||||
|
|
@ -3524,7 +3526,7 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,
|
|||
snd_pcm_uframes_t *frames = arg;
|
||||
snd_pcm_sframes_t result;
|
||||
|
||||
if (substream->runtime->state == SNDRV_PCM_STATE_DISCONNECTED)
|
||||
if (snd_pcm_get_state(substream) == SNDRV_PCM_STATE_DISCONNECTED)
|
||||
return -EBADFD;
|
||||
|
||||
switch (cmd) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user