vdr 1.3.35 crashing when leaving a recording at the end

Message ID 2a954dbc0511011029y7b5f7c08m@mail.gmail.com
State New
Headers

Commit Message

Joachim Wilke Nov. 1, 2005, 6:29 p.m. UTC
  Hi everyone,

i have experienced some strange behaviour of my plain vanilla vdr.
When vdr reaches the end of a replay it segfaults. Core file analysis
showed the following backtrace:

#0  cUnbufferedFile::Seek(long, int) (this=0x0, Offset=0, Whence=0) at
tools.c:884
#1  0x080dab2c in cFileName::SetOffset(int, int) (this=0xb56a1540,
Number=3, Offset=0) at recording.c:1345
#2  0x080dac5d in cFileName::NextFile() (this=0x0) at recording.c:1358
#3  0x0809d8e1 in cDvbPlayer::NextFile(unsigned char, int)
(this=0xb56a1540, FileNumber=64 '@', FileOffset=0) at dvbplayer.c:306
#4  0x0809db67 in cDvbPlayer::Action() (this=0x3) at thread.h:94
#5  0x080fce56 in cThread::StartThread(cThread*) (Thread=0x3) at thread.c:234
#6  0xb7fbab63 in start_thread () from /lib/tls/libpthread.so.0

It seems that vdr tries to access a reference to an cUbufferedFile
object in cFileName::SetOffset which is a null pointer. The following
quick and dirty hack solved the crash, but as I don't know this code
deep enough it may have other side effects.

            }

Regards,
Joachim.
  

Comments

Klaus Schmidinger Nov. 1, 2005, 6:56 p.m. UTC | #1
Joachim Wilke wrote:
> Hi everyone,
> 
> i have experienced some strange behaviour of my plain vanilla vdr.
> When vdr reaches the end of a replay it segfaults. Core file analysis
> showed the following backtrace:
> 
> #0  cUnbufferedFile::Seek(long, int) (this=0x0, Offset=0, Whence=0) at
> tools.c:884
> #1  0x080dab2c in cFileName::SetOffset(int, int) (this=0xb56a1540,
> Number=3, Offset=0) at recording.c:1345
> #2  0x080dac5d in cFileName::NextFile() (this=0x0) at recording.c:1358
> #3  0x0809d8e1 in cDvbPlayer::NextFile(unsigned char, int)
> (this=0xb56a1540, FileNumber=64 '@', FileOffset=0) at dvbplayer.c:306
> #4  0x0809db67 in cDvbPlayer::Action() (this=0x3) at thread.h:94
> #5  0x080fce56 in cThread::StartThread(cThread*) (Thread=0x3) at thread.c:234
> #6  0xb7fbab63 in start_thread () from /lib/tls/libpthread.so.0
> 
> It seems that vdr tries to access a reference to an cUbufferedFile
> object in cFileName::SetOffset which is a null pointer. The following
> quick and dirty hack solved the crash, but as I don't know this code
> deep enough it may have other side effects.
> 
> --- recording.c.sav     Mon Oct 31 13:27:58 2005
> +++ recording.c Tue Nov  1 19:20:27 2005
> @@ -1342,7 +1342,7 @@ cUnbufferedFile *cFileName::SetOffset(in
>          // found a non existing file suffix
>          }
>       if (Open() >= 0) {
> -        if (!record && Offset >= 0 && file->Seek(Offset, SEEK_SET) != Offset) {
> +        if (!record && Offset >= 0 && file && file->Seek(Offset,
> SEEK_SET) != Offset) {
>             LOG_ERROR_STR(fileName);
>             return NULL;
>             }
> 
> Regards,
> Joachim.

I'd say this isn't just a "quick and dirty hack", it's the actual fix.
Before using cUbufferedFile the lseek() just failed when the file handle
was -1. Now the pointer is NULL in than case, so the check is necessary.

Thanks for spotting.

Klaus
  
Christian Balzer Nov. 1, 2005, 7:30 p.m. UTC | #2
Hi @ll,

now I've got a second problem after i ensured that my FF card is broken: 
Now I try to get my output via na old Hollywood+ card. But I don't know 
if I'm using a wrong cable or if it isn't working.
When my (c't)VDR starts the TV is flickering a short time (when the 
drivers for the Hollywood Plus card are loaded). But when this is done 
the screen stays black.
I installed the Hollywood card simply by apt-get install vdr-plugin-dxr3 ...
Now is my question: do I have to tell VDR explicitly to use the 
Hollywood card instead of my (semi-broken) FF card? Or am I using the 
wrong cable so that it's not possible to display anything?

Any hint? Would be thankful for any help!

Christian
  
Christian Balzer Nov. 1, 2005, 8:05 p.m. UTC | #3
Now I tried to connect an old VGA monitor at my Hollywood card. But it 
also stays black ...
??!??!

Christian



Christian Balzer schrieb:

> Hi @ll,
>
> now I've got a second problem after i ensured that my FF card is 
> broken: Now I try to get my output via na old Hollywood+ card. But I 
> don't know if I'm using a wrong cable or if it isn't working.
> When my (c't)VDR starts the TV is flickering a short time (when the 
> drivers for the Hollywood Plus card are loaded). But when this is done 
> the screen stays black.
> I installed the Hollywood card simply by apt-get install 
> vdr-plugin-dxr3 ...
> Now is my question: do I have to tell VDR explicitly to use the 
> Hollywood card instead of my (semi-broken) FF card? Or am I using the 
> wrong cable so that it's not possible to display anything?
>
> Any hint? Would be thankful for any help!
>
> Christian
>
> _______________________________________________
> vdr mailing list
> vdr@linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>
>
  
Niko Mikkila Nov. 1, 2005, 8:22 p.m. UTC | #4
On Tue, 01 Nov 2005 20:30:04 +0100
Christian Balzer <christian-balzer@gmx.de> wrote:

> Hi @ll,
> 
> now I've got a second problem after i ensured that my FF card is broken: 
> Now I try to get my output via na old Hollywood+ card. But I don't know 
> if I'm using a wrong cable or if it isn't working.
> When my (c't)VDR starts the TV is flickering a short time (when the 
> drivers for the Hollywood Plus card are loaded). But when this is done 
> the screen stays black.
> I installed the Hollywood card simply by apt-get install vdr-plugin-dxr3 ...
> Now is my question: do I have to tell VDR explicitly to use the 
> Hollywood card instead of my (semi-broken) FF card? Or am I using the 
> wrong cable so that it's not possible to display anything?
> 
> Any hint? Would be thankful for any help!
> 
> Christian

Have you changed the primary device setting to point to the Hollywood+ in
VDR setup and are you running vdr with the dxr3 plugin (-Pdxr3)?
If you only have one FF card, the primary device should be 2, unless I
remember incorrectly (1 is the FF card).

You can also test the Hollywood+ card with MPlayer. There are various
parameters that can be given to the em8300 and other dxr3 modules.
You need to read the documentation at the dxr3 project SourceForge page
and within the source code package to get an idea of the possible
problems and solutions. Incorrect parameter values can cause various
defects to the picture and it is easier to test different settings
with MPlayer.

--
Niko Mikkilä
  
Sascha Volkenandt Nov. 1, 2005, 8:57 p.m. UTC | #5
On Tuesday 01 November 2005 20:30, Christian Balzer wrote:
> [...]

Just a side note: Please use the "New Message" button when you create a new 
message.

Greetings,
Sascha
  
Christian Balzer Nov. 1, 2005, 9:19 p.m. UTC | #6
Hi Niko,

first of all: thanks for the fast answer.
second a dum question: where can I change the primary device? I found 
various discussions about the primary device but i didn't find anything 
about where to set this. In which configure file  is this done???

Christian


Niko Mikkila schrieb:

>On Tue, 01 Nov 2005 20:30:04 +0100
>Christian Balzer <christian-balzer@gmx.de> wrote:
>
>  
>
>>Hi @ll,
>>
>>now I've got a second problem after i ensured that my FF card is broken: 
>>Now I try to get my output via na old Hollywood+ card. But I don't know 
>>if I'm using a wrong cable or if it isn't working.
>>When my (c't)VDR starts the TV is flickering a short time (when the 
>>drivers for the Hollywood Plus card are loaded). But when this is done 
>>the screen stays black.
>>I installed the Hollywood card simply by apt-get install vdr-plugin-dxr3 ...
>>Now is my question: do I have to tell VDR explicitly to use the 
>>Hollywood card instead of my (semi-broken) FF card? Or am I using the 
>>wrong cable so that it's not possible to display anything?
>>
>>Any hint? Would be thankful for any help!
>>
>>Christian
>>    
>>
>
>Have you changed the primary device setting to point to the Hollywood+ in
>VDR setup and are you running vdr with the dxr3 plugin (-Pdxr3)?
>If you only have one FF card, the primary device should be 2, unless I
>remember incorrectly (1 is the FF card).
>
>You can also test the Hollywood+ card with MPlayer. There are various
>parameters that can be given to the em8300 and other dxr3 modules.
>You need to read the documentation at the dxr3 project SourceForge page
>and within the source code package to get an idea of the possible
>problems and solutions. Incorrect parameter values can cause various
>defects to the picture and it is easier to test different settings
>with MPlayer.
>
>--
>Niko Mikkilä
>
>_______________________________________________
>vdr mailing list
>vdr@linuxtv.org
>http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>
>
>  
>
  
Niko Mikkila Nov. 2, 2005, 12:59 a.m. UTC | #7
On Tue, 01 Nov 2005 22:19:53 +0100
Christian Balzer <christian-balzer@gmx.de> wrote:

> Hi Niko,
> 
> first of all: thanks for the fast answer.
> second a dum question: where can I change the primary device? I found 
> various discussions about the primary device but i didn't find anything 
> about where to set this. In which configure file  is this done???
> 
> Christian
> 

I don't have access to my VDR box right now, but I think it is in setup.conf
like most of the settings. Just look for PrimaryDVB in that file.

--
Niko Mikkilä
  
Lars Bläser Nov. 2, 2005, 6:21 a.m. UTC | #8
Christian Balzer wrote:
> second a dum question: where can I change the primary device? I found
> various discussions about the primary device but i didn't find anything
> about where to set this. In which configure file  is this done???

hi,

to be certain that the h+ is working you could have a look at the init
parameters of the dxr3 drivers, there is a picture generator function
intergrated (can´t remember witch module, its to long ago)
  
michaelip@free.fr Nov. 2, 2005, 9:26 a.m. UTC | #9
Selon Lars Bläser <lars.blaeser@lycosxxl.de>:

> Christian Balzer wrote:
> > second a dum question: where can I change the primary device? I found
> > various discussions about the primary device but i didn't find anything
> > about where to set this. In which configure file  is this done???
>
> hi,
>
> to be certain that the h+ is working you could have a look at the init
> parameters of the dxr3 drivers, there is a picture generator function
> intergrated (can´t remember witch module, its to long ago)
>
>
>
> _______________________________________________
> vdr mailing list
> vdr@linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>



Christian,

A Hollywood+ card needs some specific drivers to be loaded prior to use it !
If your TV is flickering when loading the drivers, it seems that you have some
drivers... Meanwhile, the TV screen should normally (often) became grren for a
while, before displaying the channel you're watching !

So that, could you please look at the following:

1. If you display loaded modules (bash command is lsmod), do you see the em8300
drivers ?
2. Do you have FFMPEG installed correctly ? EM8300 drivers needs that !

EM8300 is the driver used to manage the Hollywood+ card.

More informations about installing/using the DXR3 plugin is located at
http://www.linuxtv.org/vdrwiki/index.php/Dxr3-plugin

PS: Before changing the setup.conf file for changing the primary device, make
sure that vdr is not working !
  
Christian Balzer Nov. 2, 2005, 10:24 a.m. UTC | #10
Hi Michael,

- the drivers are loaded
- i installed FFMPEG manually, but i thought that the c't vdr managed 
the installation of all needed hollywood+ stuff correctly. Anyway, the 
installation of ffmpeg didn't change anything

When i try "mplayer -ao oss:/dev/em8300_ma-0 -vo dxr3 dvd://1" i can see 
the DVD via the h+ card. So now i know that is not broken. But i cant't 
imagine, what's wrong when i try to disply the vdr ...

Christian


michaelip@free.fr schrieb:

>Selon Lars Bläser <lars.blaeser@lycosxxl.de>:
>
>  
>
>>Christian Balzer wrote:
>>    
>>
>>>second a dum question: where can I change the primary device? I found
>>>various discussions about the primary device but i didn't find anything
>>>about where to set this. In which configure file  is this done???
>>>      
>>>
>>hi,
>>
>>to be certain that the h+ is working you could have a look at the init
>>parameters of the dxr3 drivers, there is a picture generator function
>>intergrated (can´t remember witch module, its to long ago)
>>
>>
>>
>>_______________________________________________
>>vdr mailing list
>>vdr@linuxtv.org
>>http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>>
>>    
>>
>
>
>
>Christian,
>
>A Hollywood+ card needs some specific drivers to be loaded prior to use it !
>If your TV is flickering when loading the drivers, it seems that you have some
>drivers... Meanwhile, the TV screen should normally (often) became grren for a
>while, before displaying the channel you're watching !
>
>So that, could you please look at the following:
>
>1. If you display loaded modules (bash command is lsmod), do you see the em8300
>drivers ?
>2. Do you have FFMPEG installed correctly ? EM8300 drivers needs that !
>
>EM8300 is the driver used to manage the Hollywood+ card.
>
>More informations about installing/using the DXR3 plugin is located at
>http://www.linuxtv.org/vdrwiki/index.php/Dxr3-plugin
>
>PS: Before changing the setup.conf file for changing the primary device, make
>sure that vdr is not working !
>
>
>_______________________________________________
>vdr mailing list
>vdr@linuxtv.org
>http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>
>
>  
>
  
michaelip@free.fr Nov. 2, 2005, 10:38 a.m. UTC | #11
Selon Christian Balzer <christian-balzer@gmx.de>:

> Hi Michael,
>
> - the drivers are loaded
> - i installed FFMPEG manually, but i thought that the c't vdr managed
> the installation of all needed hollywood+ stuff correctly. Anyway, the
> installation of ffmpeg didn't change anything
>
> When i try "mplayer -ao oss:/dev/em8300_ma-0 -vo dxr3 dvd://1" i can see
> the DVD via the h+ card. So now i know that is not broken. But i cant't
> imagine, what's wrong when i try to disply the vdr ...
>
> Christian
>
>
> michaelip@free.fr schrieb:
>
> >Selon Lars Bläser <lars.blaeser@lycosxxl.de>:
> >
> >
> >
> >>Christian Balzer wrote:
> >>
> >>
> >>>second a dum question: where can I change the primary device? I found
> >>>various discussions about the primary device but i didn't find anything
> >>>about where to set this. In which configure file  is this done???
> >>>
> >>>
> >>hi,
> >>
> >>to be certain that the h+ is working you could have a look at the init
> >>parameters of the dxr3 drivers, there is a picture generator function
> >>intergrated (can´t remember witch module, its to long ago)
> >>
> >>
> >>
> >>_______________________________________________
> >>vdr mailing list
> >>vdr@linuxtv.org
> >>http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
> >>
> >>
> >>
> >
> >
> >
> >Christian,
> >
> >A Hollywood+ card needs some specific drivers to be loaded prior to use it !
> >If your TV is flickering when loading the drivers, it seems that you have
> some
> >drivers... Meanwhile, the TV screen should normally (often) became grren for
> a
> >while, before displaying the channel you're watching !
> >
> >So that, could you please look at the following:
> >
> >1. If you display loaded modules (bash command is lsmod), do you see the
> em8300
> >drivers ?
> >2. Do you have FFMPEG installed correctly ? EM8300 drivers needs that !
> >
> >EM8300 is the driver used to manage the Hollywood+ card.
> >
> >More informations about installing/using the DXR3 plugin is located at
> >http://www.linuxtv.org/vdrwiki/index.php/Dxr3-plugin
> >
> >PS: Before changing the setup.conf file for changing the primary device,
> make
> >sure that vdr is not working !
> >
> >
> >_______________________________________________
> >vdr mailing list
> >vdr@linuxtv.org
> >http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
> >
> >
> >
> >
>


Ok. Your card and cable are working fine ! Nice !

So now let's try changing the setup.conf ! But bne sure that vdr is stopped
before changing the file as vdr saves the setup.conf file before leaving (well,
that's what I noticed !)...

By the way, before doing that ! Did you load the DXR3 plugin when starting vdr ?
Because even if you use the wrong primary device for input, you should at least
see the OSD on the TV !

Hope it helps.
  
Christian Balzer Nov. 2, 2005, 10:56 a.m. UTC | #12
michaelip@free.fr schrieb:

>Selon Christian Balzer <christian-balzer@gmx.de>:
>
>  
>
>>Hi Michael,
>>
>>- the drivers are loaded
>>- i installed FFMPEG manually, but i thought that the c't vdr managed
>>the installation of all needed hollywood+ stuff correctly. Anyway, the
>>installation of ffmpeg didn't change anything
>>
>>When i try "mplayer -ao oss:/dev/em8300_ma-0 -vo dxr3 dvd://1" i can see
>>the DVD via the h+ card. So now i know that is not broken. But i cant't
>>imagine, what's wrong when i try to disply the vdr ...
>>
>>Christian
>>
>>
>>michaelip@free.fr schrieb:
>>
>>    
>>
>>>Selon Lars Bläser <lars.blaeser@lycosxxl.de>:
>>>
>>>
>>>
>>>      
>>>
>>>>Christian Balzer wrote:
>>>>
>>>>
>>>>        
>>>>
>>>>>second a dum question: where can I change the primary device? I found
>>>>>various discussions about the primary device but i didn't find anything
>>>>>about where to set this. In which configure file  is this done???
>>>>>
>>>>>
>>>>>          
>>>>>
>>>>hi,
>>>>
>>>>to be certain that the h+ is working you could have a look at the init
>>>>parameters of the dxr3 drivers, there is a picture generator function
>>>>intergrated (can´t remember witch module, its to long ago)
>>>>
>>>>
>>>>
>>>>_______________________________________________
>>>>vdr mailing list
>>>>vdr@linuxtv.org
>>>>http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>>>>
>>>>
>>>>
>>>>        
>>>>
>>>
>>>Christian,
>>>
>>>A Hollywood+ card needs some specific drivers to be loaded prior to use it !
>>>If your TV is flickering when loading the drivers, it seems that you have
>>>      
>>>
>>some
>>    
>>
>>>drivers... Meanwhile, the TV screen should normally (often) became grren for
>>>      
>>>
>>a
>>    
>>
>>>while, before displaying the channel you're watching !
>>>
>>>So that, could you please look at the following:
>>>
>>>1. If you display loaded modules (bash command is lsmod), do you see the
>>>      
>>>
>>em8300
>>    
>>
>>>drivers ?
>>>2. Do you have FFMPEG installed correctly ? EM8300 drivers needs that !
>>>
>>>EM8300 is the driver used to manage the Hollywood+ card.
>>>
>>>More informations about installing/using the DXR3 plugin is located at
>>>http://www.linuxtv.org/vdrwiki/index.php/Dxr3-plugin
>>>
>>>PS: Before changing the setup.conf file for changing the primary device,
>>>      
>>>
>>make
>>    
>>
>>>sure that vdr is not working !
>>>
>>>
>>>_______________________________________________
>>>vdr mailing list
>>>vdr@linuxtv.org
>>>http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>>>
>>>
>>>
>>>
>>>      
>>>
>
>
>Ok. Your card and cable are working fine ! Nice !
>
>So now let's try changing the setup.conf ! But bne sure that vdr is stopped
>before changing the file as vdr saves the setup.conf file before leaving (well,
>that's what I noticed !)...
>
>By the way, before doing that ! Did you load the DXR3 plugin when starting vdr ?
>Because even if you use the wrong primary device for input, you should at least
>see the OSD on the TV !
>
>Hope it helps.
>
>_______________________________________________
>vdr mailing list
>vdr@linuxtv.org
>http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>  
>
I tried to change settings in the setup.conf with a stopped vdr. But it 
didn't work. :-(
Even the OSD is not displayed. I get nothing expect the flickering while 
drivers are loaded.
Err, the dxr3 drivers are loaded by /etc/init.d/vdr start -dxr3 or not??
When VDR is started these are last the ouput lines:

av7110: found av7110-0
adv717x.o Configuring for PAL
am8300_audio.o: Analof audio enabled
em8300: Microcode version 0x29 loaded

Christian

>
>  
>
  

Patch

--- recording.c.sav     Mon Oct 31 13:27:58 2005
+++ recording.c Tue Nov  1 19:20:27 2005
@@ -1342,7 +1342,7 @@  cUnbufferedFile *cFileName::SetOffset(in
         // found a non existing file suffix
         }
      if (Open() >= 0) {
-        if (!record && Offset >= 0 && file->Seek(Offset, SEEK_SET) != Offset) {
+        if (!record && Offset >= 0 && file && file->Seek(Offset,
SEEK_SET) != Offset) {
            LOG_ERROR_STR(fileName);
            return NULL;