[vdr] streamdev-cvs bugs & fixes

Udo Richter udo_richter at gmx.de
Sun Mar 6 17:37:01 CET 2005


Sascha Volkenandt wrote:
> I assume this is a compiler bug, since the error should be caught at 
> compile-time (I can't see any error though, since the called object is a 
> derivation and the method is derived, too). Anyway, if I "shift around" those 
> methods a bit, it throws a "pure virtual method" error with gcc 2.95, but not 
> with gcc 3.x.

I've seen pure virtual method errors before with cThread's. There is a 
way how these pure virtuals can get active: At destructor time, as soon 
as the derived class is destructed, the virtuals get reverted to the 
pure virtuals of the base class, before the base class destructor takes 
over. Reason is that the derived object is gone as soon as the derived 
destructor ends, and only the base object needs to destruct.

In this case (just a guess by a quick look at source code):
~cStreamdevStreamer() calls Stop(), and Stop() calls Detach(). Since the 
derived cStreamdevLiveStreamer is already destructed, its virtual 
Detach() is gone too, and the pure virtual cStreamdevStreamer::Detach() 
gets called.

Virtuals in destructors are dangerous. Better make sure the thread is 
stopped before the object destructs...

Cheers,

Udo




More information about the vdr mailing list