[linux-dvb] problems and workaround when tuning to a channel with DD enabled

Oliver Endriss o.endriss at gmx.de
Fri Jun 17 00:59:25 CEST 2005


Johannes Stezenbach wrote:
> On Thu, Jun 16, 2005 at 06:48:55AM +0200, Oliver Endriss wrote:
> > Johannes Stezenbach wrote:
> > > On Sat, Jun 11, 2005 at 02:01:37PM +0200, Wolfgang Rohdewald wrote:
> > > > Here comes a new patch
> > > > - make sure ERESTARTSYS will always be propagated
> > > > - ReleaseBitmap: starting with Firmware 261e, also release when
> > > >   BMP_LOADING
> > > > - removes unused #define BMP_LOADINGS
> > > > - in many cases changed the return value from -1 to something more
> > > >   meaningful like ETIMEDOUT, EINVAL
> > > > - changed syslog message timeout waiting for COMMAND such that it 
> > > >   indicates what command did not complete
> > > > - reduce # of arguments for LoadBitmap and BlitBitmap
> > > > - av7110_osd_cmd: remove the out: label
> > > 
> > > Patch is in CVS now. The 261e firmware will be released real soon now.
> > 
> > Looks ok if OSDSetBlock is _never_ used by more than one thread at the
> > same time. Otherwise, some race conditions might occur.
> > 
> > Anyway, as the OSD interface has state variables like av7110->osdwin
> > it is not thread-safe 'by design'.
> 
> av7110_osd_cmd() is protected by av7110->osd_sema. Where
> do you think there is a race condition?

Ok, I somehow missed the semphore calls.
Unfortunately, the semaphore will not help in the following case:

| Task A                  Task B
|
| OSD_SetWindow(win1)
|
|                         OSD_SetWindow(win2)
|                         OSD_SetBlock(data2)
|
| OSD_SetBlock(data1)

So data1 would be written to the wrong osd window. :-(
This problem can't be fixed easily.

Oliver

-- 
--------------------------------------------------------
VDR Remote Plugin available at
http://www.escape-edv.de/endriss/vdr/
--------------------------------------------------------




More information about the linux-dvb mailing list