Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vdr] Re: UPT-Error related with vdr-1.1.27-1.1.28-c.diff



At Dienstag, 23. September 2003 22:26 Martin Holst wrote:
> > ------------------------ snip ----------------------------
> > Program received signal SIGSEGV, Segmentation fault.
> > [Switching to Thread 2051 (LWP 1495)]
> > 0x0807dfb8 in cCaDescriptors::Get(int, int, int, int) (this=0x0.
> > Source=0, Transponder=0, ServiceId=0, CaSystem=0) at tools.h:175 175   
> >   T *First(void) const { return (T *)objects; }
> > Current language:  auto; currently c++
> > (gdb)
> > ------------------------ snip ----------------------------
> >
> > If i enter "bt" I get:
> >
> > ------------------------ snip ----------------------------
> > #0 0x0807dfb8 in cCaDescriptors::Get(int, int, int, int) (this=0x0.
> > Source=0,
> >         Transponder=0, ServiceId=0, CaSystem=0) at tools.h:175
> > #1 0x0807f268 in cSIProcessor::GetCaDescriptors(int, int, int, int,
> > unsigned
> >         char*) (Source=35008, Transponder=12188, ServiceId=12003,
> >         BufSize=2048, Data=0xbf5ff27c "") at eit.c:1536
> > #2 ... #5 (shouldn't be important)
> > ------------------------ snip ----------------------------
> >
> > So: why is the get-method called with an null pinter and 0 as
> > parameter? How can I find out, who called this method?
>
> I found out, that up is my friend her. ;-) Now I've debugged a little bit
> and I recognized, that the segmentation fault comes from
> for (cCaDescriptor *ca=First(); ca; Next(ca)) in cCaDescriptors::Get(...)
> where the problem is the condition. Every command is ok, but
> when I do a
> cCaDescriptor *ca = NULL; printf("Line1\n");
> ca=First(); printf("Line2\n");
> if (ca) printf("condition is true\n");
>    else printf("condition is false\n");
> printf("Line3\n");
>
> I will see Line1 and Line2 but not Line3 or anything out of the if. What
> could be the problem?

This looks like a serious bug. As you can see in the line
> > #0 0x0807dfb8 in cCaDescriptors::Get(int, int, int, int) (this=0x0.

the this-poitner is Zero, which may not be. It means that someone did an 
object->method(), without object being initialized (better: with object 
being initialized to NULL). When the first member variable of the class is 
called, then some kind of address 0x0 + X is being accessed, which causes 
the segfault.

My assumption would be that there is some configuration file missing 
(ca.conf???) or incorrect, but the SEGFAULT is still a bug and has to be 
solved (Klaus?).

I'll look into the code later, maybe I find the cause, but first I will eat 
something :-)))

Greetings,
Sascha


-- 
Info:
To unsubscribe send a mail to ecartis@linuxtv.org with "unsubscribe vdr" as subject.



Home | Main Index | Thread Index