From 2335e6e71a3294045f20d1e9bb5b3447fbbc5bc8 Mon Sep 17 00:00:00 2001 From: Andy Walls Date: Sat, 30 Jan 2010 15:28:22 -0300 Subject: [PATCH] --- yaml --- r: 181612 b: refs/heads/master c: b4729dcbba5431bf636d3d6615709383ad5e0d34 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/media/video/cx18/cx18-alsa-pcm.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index a839e415336a..764dbfd896eb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 83695009a439b86c520f9001c80cc5a042c2d940 +refs/heads/master: b4729dcbba5431bf636d3d6615709383ad5e0d34 diff --git a/trunk/drivers/media/video/cx18/cx18-alsa-pcm.c b/trunk/drivers/media/video/cx18/cx18-alsa-pcm.c index b9f42b1d886f..06862a69c7b0 100644 --- a/trunk/drivers/media/video/cx18/cx18-alsa-pcm.c +++ b/trunk/drivers/media/video/cx18/cx18-alsa-pcm.c @@ -156,12 +156,15 @@ static int snd_cx18_pcm_capture_open(struct snd_pcm_substream *substream) int ret; /* Instruct the cx18 to start sending packets */ + snd_cx18_lock(cxsc); s = &cx->streams[CX18_ENC_STREAM_TYPE_PCM]; /* Allocate memory */ item = kmalloc(sizeof(struct cx18_open_id), GFP_KERNEL); - if (NULL == item) + if (NULL == item) { + snd_cx18_unlock(cxsc); return -ENOMEM; + } item->cx = cx; item->type = s->type; @@ -171,12 +174,14 @@ static int snd_cx18_pcm_capture_open(struct snd_pcm_substream *substream) if (cx18_claim_stream(item, item->type)) { /* No, it's already in use */ kfree(item); + snd_cx18_unlock(cxsc); return -EBUSY; } if (test_bit(CX18_F_S_STREAMOFF, &s->s_flags) || test_and_set_bit(CX18_F_S_STREAMING, &s->s_flags)) { /* We're already streaming. No additional action required */ + snd_cx18_unlock(cxsc); return 0; } @@ -191,6 +196,7 @@ static int snd_cx18_pcm_capture_open(struct snd_pcm_substream *substream) /* Not currently streaming, so start it up */ set_bit(CX18_F_S_STREAMING, &s->s_flags); ret = cx18_start_v4l2_encode_stream(s); + snd_cx18_unlock(cxsc); return 0; } @@ -204,6 +210,7 @@ static int snd_cx18_pcm_capture_close(struct snd_pcm_substream *substream) int ret; /* Instruct the cx18 to stop sending packets */ + snd_cx18_lock(cxsc); s = &cx->streams[CX18_ENC_STREAM_TYPE_PCM]; ret = cx18_stop_v4l2_encode_stream(s, 0); clear_bit(CX18_F_S_STREAMING, &s->s_flags); @@ -211,6 +218,7 @@ static int snd_cx18_pcm_capture_close(struct snd_pcm_substream *substream) cx18_release_stream(s); cx->pcm_announce_callback = NULL; + snd_cx18_unlock(cxsc); return 0; }