diff options
Diffstat (limited to 'sound/core/pcm.c')
-rw-r--r-- | sound/core/pcm.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sound/core/pcm.c b/sound/core/pcm.c index c69c60b2a48a..0d428d0896db 100644 --- a/sound/core/pcm.c +++ b/sound/core/pcm.c | |||
@@ -435,6 +435,7 @@ static void snd_pcm_substream_proc_status_read(struct snd_info_entry *entry, | |||
435 | return; | 435 | return; |
436 | } | 436 | } |
437 | snd_iprintf(buffer, "state: %s\n", snd_pcm_state_name(status.state)); | 437 | snd_iprintf(buffer, "state: %s\n", snd_pcm_state_name(status.state)); |
438 | snd_iprintf(buffer, "owner_pid : %d\n", pid_vnr(substream->pid)); | ||
438 | snd_iprintf(buffer, "trigger_time: %ld.%09ld\n", | 439 | snd_iprintf(buffer, "trigger_time: %ld.%09ld\n", |
439 | status.trigger_tstamp.tv_sec, status.trigger_tstamp.tv_nsec); | 440 | status.trigger_tstamp.tv_sec, status.trigger_tstamp.tv_nsec); |
440 | snd_iprintf(buffer, "tstamp : %ld.%09ld\n", | 441 | snd_iprintf(buffer, "tstamp : %ld.%09ld\n", |
@@ -809,7 +810,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, | |||
809 | card = pcm->card; | 810 | card = pcm->card; |
810 | read_lock(&card->ctl_files_rwlock); | 811 | read_lock(&card->ctl_files_rwlock); |
811 | list_for_each_entry(kctl, &card->ctl_files, list) { | 812 | list_for_each_entry(kctl, &card->ctl_files, list) { |
812 | if (kctl->pid == current->pid) { | 813 | if (kctl->pid == task_pid(current)) { |
813 | prefer_subdevice = kctl->prefer_pcm_subdevice; | 814 | prefer_subdevice = kctl->prefer_pcm_subdevice; |
814 | if (prefer_subdevice != -1) | 815 | if (prefer_subdevice != -1) |
815 | break; | 816 | break; |
@@ -893,6 +894,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, | |||
893 | memset((void*)runtime->control, 0, size); | 894 | memset((void*)runtime->control, 0, size); |
894 | 895 | ||
895 | init_waitqueue_head(&runtime->sleep); | 896 | init_waitqueue_head(&runtime->sleep); |
897 | init_waitqueue_head(&runtime->tsleep); | ||
896 | 898 | ||
897 | runtime->status->state = SNDRV_PCM_STATE_OPEN; | 899 | runtime->status->state = SNDRV_PCM_STATE_OPEN; |
898 | 900 | ||
@@ -900,6 +902,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, | |||
900 | substream->private_data = pcm->private_data; | 902 | substream->private_data = pcm->private_data; |
901 | substream->ref_count = 1; | 903 | substream->ref_count = 1; |
902 | substream->f_flags = file->f_flags; | 904 | substream->f_flags = file->f_flags; |
905 | substream->pid = get_pid(task_pid(current)); | ||
903 | pstr->substream_opened++; | 906 | pstr->substream_opened++; |
904 | *rsubstream = substream; | 907 | *rsubstream = substream; |
905 | return 0; | 908 | return 0; |
@@ -919,8 +922,14 @@ void snd_pcm_detach_substream(struct snd_pcm_substream *substream) | |||
919 | snd_free_pages((void*)runtime->control, | 922 | snd_free_pages((void*)runtime->control, |
920 | PAGE_ALIGN(sizeof(struct snd_pcm_mmap_control))); | 923 | PAGE_ALIGN(sizeof(struct snd_pcm_mmap_control))); |
921 | kfree(runtime->hw_constraints.rules); | 924 | kfree(runtime->hw_constraints.rules); |
925 | #ifdef CONFIG_SND_PCM_XRUN_DEBUG | ||
926 | if (runtime->hwptr_log) | ||
927 | kfree(runtime->hwptr_log); | ||
928 | #endif | ||
922 | kfree(runtime); | 929 | kfree(runtime); |
923 | substream->runtime = NULL; | 930 | substream->runtime = NULL; |
931 | put_pid(substream->pid); | ||
932 | substream->pid = NULL; | ||
924 | substream->pstr->substream_opened--; | 933 | substream->pstr->substream_opened--; |
925 | } | 934 | } |
926 | 935 | ||