diff options
author | Mike Isely <isely@pobox.com> | 2006-03-30 22:46:49 -0600 |
---|---|---|
committer | Mike Isely <isely@pobox.com> | 2006-03-30 22:46:49 -0600 |
commit | 4a70d7bbda936a5e93a2d6f6061800327491cc69 (patch) | |
tree | e7734e7cfedf5a03d71471826f116e45df37272d /linux/drivers/media/dvb/dvb-core/dmxdev.c | |
parent | 012c447c3dd586921468215450cb6cce65052a3c (diff) | |
parent | b03dad0db6b312169fd2e16c18187703b23ecd38 (diff) | |
download | mediapointer-dvb-s2-4a70d7bbda936a5e93a2d6f6061800327491cc69.tar.gz mediapointer-dvb-s2-4a70d7bbda936a5e93a2d6f6061800327491cc69.tar.bz2 |
Merge from master
From: Mike Isely <isely@pobox.com>
Signed-off-by: Mike Isely <isely@pobox.com>
Diffstat (limited to 'linux/drivers/media/dvb/dvb-core/dmxdev.c')
-rw-r--r-- | linux/drivers/media/dvb/dvb-core/dmxdev.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/linux/drivers/media/dvb/dvb-core/dmxdev.c b/linux/drivers/media/dvb/dvb-core/dmxdev.c index 09e96e9dd..04578df3f 100644 --- a/linux/drivers/media/dvb/dvb-core/dmxdev.c +++ b/linux/drivers/media/dvb/dvb-core/dmxdev.c @@ -141,12 +141,18 @@ static int dvb_dvr_open(struct inode *inode, struct file *file) } if ((file->f_flags & O_ACCMODE) == O_RDONLY) { - void *mem = vmalloc(DVR_BUFFER_SIZE); + void *mem; + if (!dvbdev->readers) { + mutex_unlock(&dmxdev->mutex); + return -EBUSY; + } + mem = vmalloc(DVR_BUFFER_SIZE); if (!mem) { mutex_unlock(&dmxdev->mutex); return -ENOMEM; } dvb_ringbuffer_init(&dmxdev->dvr_buffer, mem, DVR_BUFFER_SIZE); + dvbdev->readers--; } if ((file->f_flags & O_ACCMODE) == O_WRONLY) { @@ -184,6 +190,7 @@ static int dvb_dvr_release(struct inode *inode, struct file *file) dmxdev->dvr_orig_fe); } if ((file->f_flags & O_ACCMODE) == O_RDONLY) { + dvbdev->readers++; if (dmxdev->dvr_buffer.data) { void *mem = dmxdev->dvr_buffer.data; mb(); @@ -1029,8 +1036,7 @@ static struct file_operations dvb_dvr_fops = { static struct dvb_device dvbdev_dvr = { .priv = NULL, - .users = 1, - .writers = 1, + .readers = 1, .fops = &dvb_dvr_fops }; |