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(&params, parg, sizeof(params)))
 			
 		        ret=-EFAULT;
-		else
+		else {
+	                if (down_interruptible(&dmxdevfilter->mutex)) {
+	                        up(&dmxdev->mutex);
+				return -ERESTARTSYS;
+			}
 		        ret=DmxDevFilterSet(dmxdev, dmxdevfilter, &params);
+			up(&dmxdevfilter->mutex);
+		}
 		break;
 	}
 
@@ -965,13 +990,24 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
 		
 		if (copy_from_user(&params, parg, sizeof(params)))
 		        ret=-EFAULT;
-		else
+		else {
+	                if (down_interruptible(&dmxdevfilter->mutex)) {
+	                      up(&dmxdev->mutex);
+			      return -ERESTARTSYS;
+			}
 			ret=DmxDevPesFilterSet(dmxdev, dmxdevfilter, &params);
+			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