Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux-dvb] Re: reading two elementary PIDs (Aud and Vid) at once
On Friday 01 November 2002 03:42 am, Holger Waechtler wrote:
> Hi Matt,
>
> there are many things changed since your patch, could you please
> regenerate your patch using "diff -pu" so that I can see the function
> names?
>
> thanks,
>
> Holger
>
Here is a diff on the changes against the REL-0-9-2 branch checked out today:
[mdavis REL-0-9-2]$ diff -rpu DVB/ temp/DVB/
diff -rpu DVB/driver/dmxdev.c temp/DVB/driver/dmxdev.c
--- DVB/driver/dmxdev.c Thu Aug 1 11:46:11 2002
+++ temp/DVB/driver/dmxdev.c Fri Nov 1 08:48:44 2002
@@ -722,6 +722,7 @@ DmxDevFilterAlloc(dmxdev_t *dmxdev, stru
return -EMFILE;
}
dmxdevfilter=&dmxdev->filter[i];
+ sema_init(&dmxdevfilter->mutex, 1);
file->private_data=dmxdevfilter;
DmxDevBufferInit(&dmxdevfilter->buffer);
@@ -747,6 +748,11 @@ DmxDevFilterFree(dmxdev_t *dmxdev, struc
up(&dmxdev->mutex);
return -EINVAL;
}
+
+ if (down_interruptible(&dmxdevfilter->mutex)) {
+ up(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
DmxDevFilterStop(dmxdevfilter);
DmxDevFilterReset(dmxdevfilter);
@@ -761,6 +767,7 @@ DmxDevFilterFree(dmxdev_t *dmxdev, struc
}
DmxDevFilterStateSet(dmxdevfilter, DMXDEV_STATE_FREE);
wake_up(&dmxdevfilter->buffer.queue);
+ up(&dmxdevfilter->mutex);
up(&dmxdev->mutex);
//printk("free filters = %d\n", DmxDevFilterNum(dmxdev));
return 0;
@@ -907,7 +914,7 @@ DmxDevRead(dmxdev_t *dmxdev, struct file
dmxdev_filter_t *dmxdevfilter=DmxDevFile2Filter(dmxdev, file);
int ret=0;
- if (down_interruptible(&dmxdev->mutex))
+ if (down_interruptible(&dmxdevfilter->mutex))
return -ERESTARTSYS;
if (dmxdevfilter->type==DMXDEV_TYPE_SEC)
@@ -916,7 +923,7 @@ DmxDevRead(dmxdev_t *dmxdev, struct file
ret=DmxDevBufferRead(&dmxdevfilter->buffer,
file->f_flags&O_NONBLOCK,
buf, count, ppos);
- up(&dmxdev->mutex);
+ up(&dmxdevfilter->mutex);
return ret;
}
@@ -937,14 +944,26 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
switch (cmd) {
case DMX_START:
+ if (down_interruptible(&dmxdevfilter->mutex)) {
+ up(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
+
if (dmxdevfilter->state<DMXDEV_STATE_SET)
ret=-EINVAL;
else
ret=DmxDevFilterStart(dmxdevfilter);
+
+ up(&dmxdevfilter->mutex);
break;
case DMX_STOP:
+ if (down_interruptible(&dmxdevfilter->mutex)) {
+ up(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
ret=DmxDevFilterStop(dmxdevfilter);
+ up(&dmxdevfilter->mutex);
break;
case DMX_SET_FILTER:
@@ -954,8 +973,14 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
if (copy_from_user(¶ms, parg, sizeof(params)))
ret=-EFAULT;
- else
+ else {
+ if (down_interruptible(&dmxdevfilter->mutex)) {
+ up(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
ret=DmxDevFilterSet(dmxdev, dmxdevfilter, ¶ms);
+ up(&dmxdevfilter->mutex);
+ }
break;
}
@@ -965,13 +990,24 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
if (copy_from_user(¶ms, parg, sizeof(params)))
ret=-EFAULT;
- else
+ else {
+ if (down_interruptible(&dmxdevfilter->mutex)) {
+ up(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
ret=DmxDevPesFilterSet(dmxdev, dmxdevfilter, ¶ms);
+ up(&dmxdevfilter->mutex);
+ }
break;
}
case DMX_SET_BUFFER_SIZE:
+ if (down_interruptible(&dmxdevfilter->mutex)) {
+ up(&dmxdev->mutex);
+ return -ERESTARTSYS;
+ }
ret=DmxDevSetBufferSize(dmxdevfilter, arg);
+ up(&dmxdevfilter->mutex);
break;
case DMX_GET_EVENT:
diff -rpu DVB/driver/dmxdev.h temp/DVB/driver/dmxdev.h
--- DVB/driver/dmxdev.h Mon Oct 29 05:51:26 2001
+++ temp/DVB/driver/dmxdev.h Fri Nov 1 08:48:44 2002
@@ -96,6 +96,8 @@ typedef struct dmxdev_filter_s {
struct dmxdev_s *dev;
dmxdev_buffer_t buffer;
+ struct semaphore mutex;
+
// only for sections
struct timer_list timer;
int todo;
--
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe linux-dvb" as subject.
Home |
Main Index |
Thread Index